java - 使用实体列表在 JPA 中搜索和排序问题
问题描述
假设我有两个实体,第一个
//Annotations skipped
public class Person {
List<Name> names;
//getter,setter
}
public class Name {
String name;
//getter, setter
}
我想使用 JPA(Hibernate) 根据名称进行搜索和排序
我写了一个类似的查询;
SELECT entity FROM person entity LEFT JOIN entity.names as names
WHERE names.name like :keyword ORDER BY names.name
当一个人有一个名字时,没有问题。如果存在多个名称,JPA 会为每个名称返回一个 Person。如果我使用Distict
这个时间,hibernate 会警告我区分必须按部分排序。
我怎么解决这个问题
解决方案
我建议您将所有人员列在一个列表中,然后使用您的实现可能如下所示的位置List<Person> persons
对列表进行排序:Collections.sort(persons, customComparator);
Comparator
class CustomPersonComparator implements Comparator<Person>{
@Override
public int compare(Person o1, Person o2) {
return 0;//TODO for you: perform your names comparision here and return int comparison result accordingly.
}
}
您可以在此处阅读有关比较器的 impl
推荐阅读
- r - 如何计算 R 中数据表中的唯一组合?
- walmart-api - 查找 Walmart Product Lookup API 的 itemId
- javascript - JavaScript:在第一个等待的承诺之前,异步函数中的代码会同步运行吗?
- typescript - 如何将 FieldArrays 与打字稿一起使用?
- javascript - JS对象数组格式化
- reactjs - 一个组件可以访问另一个不相关组件的视图模型吗?
- symfony - 带有固定字段的 Symfony 表单集合
- c# - 如何根据条件选择实体属性?
- java - 我在对齐元素时遇到问题(Java GUI / Swing);
- python - 使用python更改PowerPoint条形图中的值