【问题标题】:Hibernate criteria to fetch the records?休眠条件来获取记录?
【发布时间】:2015-03-25 12:54:47
【问题描述】:

我在表中有以下记录。

    col1  col2  col3
------------------------
    1     Abc    IN
    2     DEF    CA
    3     Xyz    IN
    4     Cae    CA
    5     Pty    IN
    6     Zwe    DE
    7     Zwf    US

用户在这里发送一个输入,如 INCADE 等。用户输入必须映射到 col3强>。现在我需要从表中查询 所有记录,但匹配用户输入的记录(INCADE) 应首先出现在列表中,然后应出现所有其他记录。如何使用休眠条件来做到这一点?

如果用户发送 IN 作为输入,我需要以下顺序的结果。

    1     Abc    IN
    5     Pty    IN
    3     Xyz    IN
    2     DEF    CA
    4     Cae    CA
    6     Zwe    DE
    7     Zwf    US

【问题讨论】:

  • 是创建两个查询还是在 Java 端排序一个选项(Hibernate 不支持 UNION ALL 开箱即用)?
  • 感谢您的回答。我不能做两个查询,因为我有分页概念,每次应用上述逻辑时我只需要取 3 行。

标签: java mysql hibernate


【解决方案1】:

您可以尝试使用 ORDER BY CASE 构造:

order by case when <your entity>.col3 = :parameter then '0' else '1' end asc

【讨论】:

【解决方案2】:

有两种方法可以解决这个问题:
1. 创建两个查询,一个等于另一个,另一个不等于,所有结果都在一个列表中。
2. 如果您不想查询数据库两次,那么您必须在 java 中编写算法,该算法将从列表中删除您输入的元素并将其添加到另一个列表中,并在迭代后在末尾添加剩余列表。

【讨论】:

  • 感谢您的回答。我不能做两个查询,因为我有分页概念,每次应用上述逻辑时我只需要取 3 行。
【解决方案3】:

试试case ... when 语句:

select *, ( case when col3=:input then '0' | col3 else col3 end) as sorter from table order by sorter asc

不确定,如果它有效,但如果它确实是你想要的

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-08
    • 2010-09-20
    • 1970-01-01
    相关资源
    最近更新 更多