我使用Criteria Query搜索表并使用名称字段进行过滤。我过滤名称为%user-entered-name%的记录。
然后用名称列排序结果。现在我有个问题。我将它排序如下:
- name(第一个列表记录他的名字等于用户输入的名字)
- name*(第二个列表记录他的名字以用户输入的名字开头)
-
*name*
(在最后一个列表中记录hist name包含用户输入的名称)
在jpa中是否有解决方案?
谢谢。
一种解决方案是使用CASE WHEN
语句检索名为相关性的附加列。它可以定义如下:
c.multiselect(employee.get("name"),
cb.selectCase()
.when(cb.equal(employee.get("name"), "user-defined-name"), 3)
.when(cb.like(employee.get("name"), "user-defined-name%"), 2)
.when(cb.like(employee.get("name"), "%user-defined-name%"), 1)
.otherwise(0)
.alias("relevance"))