0
하나의 엔티티와 다른 엔티티의 관계가있는 엔티티가 있습니다. 이 질문을 작성한 사람 :jpa 2 CriteriaQuery는 하위 엔티티를 구별하지 않습니다.
1A -> 1.*B
CriteriaBuilder cb = super.getEntityManager().getCriteriaBuilder();
CriteriaQuery<A> select = cb.createQuery(A.class);
Root<A> from = select.from(A.class);
Join<A, B> joinB = from.<A, B>join("b");
select.select(from);
select.where(cb.between(joinB.<Date>get("date"), dateA, dateB));
문제
: 쿼리 대신 사이의 구속을 충족하는 만의 모든 자식 개체를 반환합니다. 쿼리는 항상 3 B의을 반환그래서 경우에도 3 자녀 B가 만 두 기준을 충족합니다.
hibernate의 생성 된 SQL 문을 checkin하면 알 수 있습니다. 괜찮
select a from A where a_id = ? and b_date b.date between ? and ?
, 이 검색의 모든 기관은 기준을 충족하지만, 다음 두 번째 쿼리가 B에게 개체를 얻을 발생합니다. 선택은 내가 한 번이 문제를했다,하지만 내 쿼리가 CriteriaBuilder를 사용 did't, 그리고 그것은를 FETCH JOIN 를 사용하여 해결되었다
select * from b where aid = ? and b.date between ? and ?
해야하기 때문에 잘못
select * from b where aid = ?
, 그러나 CriteriaQuery으로 해결할 수 없었습니다.