首页 > 解决方案 > 使用实体列表在 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 会警告我区分必须按部分排序。

我怎么解决这个问题

标签: javahibernatejpa

解决方案


我建议您将所有人员列在一个列表中,然后使用您的实现可能如下所示的位置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


推荐阅读