2017-09-20 7 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; 
} 

私はセットオーナーのような人物(所有者)を持っています。今私は所有者のすべての本を取ってみたい(Set)。どのようにしてこの条件をHibernate基準に追加できますか?私は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

さてあなたはこのようにRestrictions.in()メソッドを使用することができますCriteriaと:

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()を正しく実装する必要があります。

それについてさらに読書のために次のことが確認できます。

関連する問題