如何扩展jpa命令

时间:2014-07-23 08:03:15

标签: jpa criteriaquery

我使用Criteria Query搜索表并使用name字段过滤它。我过滤名称为%user-entered-name%的记录。
然后使用name列对结果进行排序。现在我有一个问题。我会像下面那样:

  • name(第一个列表记录了他的名字等于用户输入的名字)
  • name *(第二个列表记录了他的名字以用户输入的名字开头)
  • *name*(在最后一个列表中记录了hist名称包含用户输入的名称)

在jpa中是否有任何解决方案。

非常感谢。

1 个答案:

答案 0 :(得分:1)

一种解决方案是使用CASE WHEN语句检索名为 related 的其他列。它可以定义如下:

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"))