JPQL:通过“最佳匹配”排序查询结果可能吗?

时间:2011-11-25 17:14:24

标签: jpa pattern-matching jpql

我有以下问题/问题:

我正在使用JPQL(JPA 2.0和eclipselink),我想创建一个查询,它按以下方式对结果进行排序: 首先,结果按最佳匹配排序。之后应该出现劣质的比赛。 我的对象基于一个名为“人物”的简单类。属性:

{String Id,
String forename,
String name}

例如,如果我正在寻找" Picol"结果应如下所示:

[{129, Picol, Newman}, {23, Johnny, Picol},{454, Picolori, Newta}, {4774, Picolatus, Larimus}...]

PS:我已经考虑过使用两个查询,第一个是使用" equals"第二个用"喜欢",虽然我不太确定如何连接两个查询结果......?

希望得到你的帮助和提前感谢, 弗洛里安

1 个答案:

答案 0 :(得分:0)

如果您的问题似乎暗示,您只有两个组(第一组:forename或name等于搜索的字符串;第二组:forename或name包含搜索的字符串),如果给定组的所有人都拥有相同的“匹配得分”,然后使用两个查询确实是一个很好的解决方案。

首先查询:

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()方法)