2017-09-13 10 views
0

엔티티에 대한 OneToMany 관계가 있습니다 : 영역과 예약. 지역에는 많은 예약이 있거나 예약이 없으며 예약에는 하나의 지역이 있습니다. 나는 모든 지역을 질의하고 싶다. 그러나 각 지역마다 나는 조건을 충만한 예약 만 가질 것이다. 이 같은JPQL에서 하나의 엔터티지만 필터링 된 관계를 얻는 방법

지금까지 해봤 뭔가 :

em.createQuery("SELECT DISTINCT a FROM Area a LEFT JOIN a.reservations r WHERE r.startDate < :fromDate") 
       .setParameter("fromDate", fromDate, TemporalType.TIMESTAMP) 
       .getResultList(); 

그러나이 조건을 fullfill에 모든 예약이없는 그 지역을 반환하지 않습니다. 쿼리에 예약지역하지만에 존재하는 레코드를 반환하지 않는 절을 가지고 있기 때문에

답변

0

이입니다.

여기서 JPA는 대신 ON 절을 지원하지 않을 수도 있습니다.. JPA JPQL 객체 사이의 임의의 관계를 지원하지 않습니다

는 절 "의"로 정의되고 이것에 대한 해결책이 될 수 있는지 그래서

:

SQL 쿼리를 사용하여 대신 JPQL.

의 오브젝트 테이블과 필드 값을 기준으로 아래 사용하여 뭔가를보십시오 :

em.createSQLQuery("SELECT DISTINCT a.area_name FROM area a LEFT JOIN a.reservations r ON r.start_date< :fromDate") 
       .setParameter("fromDate", fromDate, TemporalType.TIMESTAMP) 
       .getResultList(); 
0

당신 캔트을 부분적으로 @OneToMany 수집을 채 웁니다. 당신은 이중 direcational 관계를 가지고 있기 때문에 , 당신은 예약에서 라운드 개체를 다른 방법으로 조회 할 수있다 :

SELECT r FROM Reservation r WHERE r r.startDate < :fromDate 

가 아닌 별개의 영역이기는하지만 귀하의 요구 사항을 fullfill에 만 예약이 이런 식으로.