【问题标题】:how to extend jpa order如何扩展jpa订单
【发布时间】:2014-07-23 08:03:14
【问题描述】:

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

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

jpa 有解决办法吗?

非常感谢。

【问题讨论】:

    标签: jpa criteriaquery


    【解决方案1】:

    一种解决方案是使用CASE WHEN 语句检索名为relevance 的附加列。可以这样定义:

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

    【讨论】:

    • 感谢您的回复。但是我如何在这个查询中设置顺序。返回结果的第二列没有名称。
    猜你喜欢
    • 1970-01-01
    • 2017-04-09
    • 1970-01-01
    • 2021-03-11
    • 1970-01-01
    • 2022-12-05
    • 1970-01-01
    • 2011-04-14
    • 1970-01-01
    相关资源
    最近更新 更多