2017-09-20 3 views
2

다음과 같은 Pojo 클래스가 있습니다.restrinction에서 콜렉션 (Set)을 사용하는 Hibernate 조건

public class Book{ 

    @Id 
    @Column(name = "ID", unique = true, nullable = false) 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    long id; 

    @Column(name = "NAME", nullable = false) 
    String name; 

    @OneToOne 
    @JoinColumn(name = "PERSON_ID", nullable = false) 
    Person owner; 
} 

세트 소유자와 같은 사람 (소유자)이 있습니다. 이제 나는 모든 소유자의 책 (세트)을 가져오고 싶습니다. 최대 절전 모드 조건에서이 조건을 어떻게 추가 할 수 있습니까? 나는 HQL을 사용하고 싶지 않다.

답변

2

난 당신과 같이 Restrictions.in을 사용할 필요가 있다고 생각 :

또한 내가 사용 가능하다고 생각
Criteria criteria = session.createCriteria(Book.class) 
        .add(Restrictions.in("owner", 
           new Person[] {person1, person2, person1})); 

List<Book> resultList = criteria.list(); 

: 음

Criteria criteria = session.createCriteria(Book.class) 
         .add(Restrictions.in("owner", 
           new HashSet<>(Arrays.asList(person1, person2, person1)))); 
+1

당신이 내 입에서 말을 가져 갔고 사실 잘 지적했습니다.) –

+1

당신은 @chsdk입니다.) –

2

Criteria와 함께이 같은 Restrictions.in() 방법을 사용할 수 있습니다 :

List<Book> books = session.createCriteria(Book.class) 
    .createAlias("owner", "o") 
    .add(Restrictions.in("o", ownersCollection.toArray(new Book[ownersCollection.size()]))) 
    .list(); 

여기에서 ownersCollection은 사용자의 컬렉션입니다.이 코드에서 ownersCollectionList<Book>으로 사용했지만 Set<Book>과 완벽하게 작동합니다.

올바른 결과를 얻으려면 Owner 클래스에 .equals()을 올바르게 구현해야합니다.

그것에 대해 더 읽기 위해 당신은 확인할 수 있습니다