2012-09-24 5 views
1

내 모델 :JPA : 연결을 필터링하는 방법은 무엇입니까?

@Entity 
class Person { 
    @Id 
    long id; 
    @OneToMany 
    Set<Employment> employments = new HashSet<Employment>(); 
} 

@Entity 
class Employment { 
    @Id 
    long id; 
    @ManyToOne 
    Company company; 
    Date from; 
    Date until; 
} 

그것은 Person 및 시간 간격에 의해 제한된 경우 Company 사이의 연결입니다.

나는 지정된 시간에 모두 Person와 그 고용을 선택하는 JPA criteria 쿼리를 찾고 있습니다.

예상되는 결과는 컬렉션 각 Personemployments 특정 기준 (또는 emplyments 전혀)와 일치만을 고용을 포함 모든명을 포함하는 List<Person>입니다.

@Where은 취업을위한 필터 기준이 가변적이기 때문에 현명한 접근법이 아닙니다. 나는 주어진 시간에 모든 사람의 고용을 선택하고 싶다.

이 또한 합리적인 일입니까? 어떻게해야할까요?

답변

1

아니요, 합리적이지 않습니다. 엔터티는 특정 쿼리에서 반환 한 날짜가 아니라 데이터베이스에있는 데이터를 나타냅니다.

단순히 ManyToOne 연결을 Employment에서 Person으로 추가하고 고용을 검색합니다. 사람이 필요하면 고용을 반복하고 각각의 고용인을 집합에 추가하십시오. 이 날짜에 고용 관련자를 원한다면 맞춤 수업 또는 MultiMap<Person, Employment>을 사용할 수 있습니다.

String hql = "select employment from Employment employment" 
      + " left join fetch employment.person" 
      + " where :date between employment.startDate and employment.endDate"; 
List<Employment> employments = session.createQuery(hql) 
             .setDate("date", date) 
             .list(); 
+0

힌트를 보내 주셔서 감사합니다! 주체가 아닌 관계를 찾는 것은 좋은 생각입니다. –

관련 문제