Java 在限制中使用集合(集合)休眠条件

Java 在限制中使用集合(集合)休眠条件,java,hibernate,collections,criteria,hibernate-criteria,Java,Hibernate,Collections,Criteria,Hibernate Criteria,我有一个像下面这样的Pojo课程 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(

我有一个像下面这样的Pojo课程

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;
}
我有一套像一套老板一样的老板。现在我要把所有主人的书都拿来。如何在Hibernate条件中添加此条件。我不想使用HQL。

我认为您需要使用限制。在类似情况下:

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))));
根据标准,您可以使用如下方法:

List<Book> books = session.createCriteria(Book.class)
    .createAlias("owner", "o")
    .add(Restrictions.in("o", ownersCollection.toArray(new Book[ownersCollection.size()])))
    .list();
其中ownersCollection是您的所有者集合,在这段代码中,我使用ownersCollection作为列表,但它也可以完美地用于Set

请注意,为了得到正确的结果,应该在所有者类中正确实现.equals

欲了解更多信息,请查看:

. .
兄弟,你从我口中说出了这些话,事实上,你说得很好;