gpt4 book ai didi

java - 使用所询问实体的子实体的信息对 Hibernate Criteria 查询的结果进行排序

转载 作者:搜寻专家 更新时间:2023-11-01 03:14:31 25 4
gpt4 key购买 nike

我有两个实体 Person 和 Book。只有一本书的一个实例存储到系统中(添加一本书时,应用程序会在向数据库添加新行之前检查是否已经找到该书)。实体相关源代码如下:

@Entity
@Table(name="persons")
@SequenceGenerator(name="id_sequence", sequenceName="hibernate_sequence")
public class Person extends BaseModel
{
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "id_sequence")
private Long id = null;

@ManyToMany(targetEntity=Book.class)
@JoinTable(name="persons_books", joinColumns = @JoinColumn( name="person_id"), inverseJoinColumns = @JoinColumn( name="book_id"))
private List<Book> ownedBooks = new ArrayList<Book>();
}

@Entity
@Table(name="books")
@SequenceGenerator(name="id_sequence", sequenceName="hibernate_sequence")
public class Book extends BaseModel
{
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "id_sequence")
private Long id = null;

@Column(name="name")
private String name = null;
}

我的问题是我想找到拥有特定人所拥有的一些书籍的人。返回的人员列表应使用以下逻辑排序:拥有大部分相同书籍的人应该排在列表的第一位,列表的第二个人拥有的书籍数量不如第一个人多,但多于第三人称。下面添加执行此查询的方法的代码:

@Override
public List<Person> searchPersonsWithSimilarBooks(Long[] bookIds) {
Criteria similarPersonCriteria = this.getSession().createCriteria(Person.class);
similarPersonCriteria.add(Restrictions.in("ownedBooks.id", bookIds));

//How to set the ordering?
similarPersonCriteria.addOrder(null);

return similarPersonCriteria.list();
}

我的问题是这可以通过使用 Hibernate 来完成吗?如果是这样,如何做到?我知道我可以实现一个比较器,但我更愿意使用 Hibernate 来解决这个问题。

当使用 SQL 时,我想要的结果可以通过使用以下 SQL 查询来实现:

select p.name, count(p.name) as bookCount from persons p, books b, person_book pb
where pb.person_id = p.id and pb.book_id = b.id and b.id in (1,2,3,4,5,6) group by
name order by bookCount desc

我一直在尝试弄清楚如何将其转换为 Criteria 查询。我一直在尝试使用投影,但我似乎无法将结果映射回 Person 对象。

最佳答案

关于java - 使用所询问实体的子实体的信息对 Hibernate Criteria 查询的结果进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2614361/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com