我有以下问题:
我使用JPQL (JPA 2.0和eclipselink),我想创建一个查询,给我排序的结果如下方式:首先,结果按最佳匹配项升序排序。之后就会出现劣等的比赛。我的对象基于一个名为"Person"的简单类,其属性为:
{String Id,
String forename,
String name}
例如,如果我搜索"Picol",结果应该是这样的:
[{129, Picol, Newman}, {23, Johnny, Picol},{454, Picolori, Newta}, {4774, Picolatus, Larimus}...]
PS:我已经考虑过使用两个查询,第一个是用"等于"搜索,第二个是用"喜欢",虽然我不太确定如何连接两个查询结果…?
希望你的帮助和提前感谢,Florian
如果,正如您的问题似乎暗示的那样,您只有两个组(第一组:名称或名称等于搜索字符串;第二组:名称或名称包含搜索字符串),如果给定组中的所有人具有相同的"匹配分数",那么使用两个查询确实是一个很好的解决方案。
第一个查询:
select p from Person p where p.foreName = :param or p.name = :param
第二个查询:
select p from Person p where (p.foreName like :paramSurroundedWithPercent
or p.name like :paramSurroundedWithPercent)
and p.foreName != :param
and p.name != :param
执行两个查询(每个都返回一个List<Person>
),并将第二个列表的所有元素添加到第一个列表(使用addAll()
方法)