【问题标题】:Placeholder for JPQL comparison operatorsJPQL 比较运算符的占位符
【发布时间】:2016-07-06 08:07:52
【问题描述】:

我是 JPA (JPQL) 的新手,所以我没有很好的解决方案来使用灵活的比较计划来维护 WHERE 子句。 我想实现如下形式的 JPQL 语句:

SELECT i FROM Item i 
    WHERE i.weight (comparison_operator_placeholder) :weight
        AND i.height (comparison_operator_placeholder) :height;

(comparison_operator_placeholder):{ = | < | > | <= | >= }

(comparison_operator_placeholder)应在运行时根据用户的输入进行选择。
直觉上我意识到不存在这样的语法,但是,除了为每个组合编写查询之外,还有其他方法。我将不胜感激任何解决方法。

【问题讨论】:

  • 小心:您将“通配符”的概念(通常是%_*)与比较运算符混淆了。这可能会被其他程序员误导和误解。我猜你真正在寻找的是“动态”。
  • 您能否向我们展示 Java 代码逻辑,该逻辑将确定您打算在 WHERE 子句中进行的比较类型?
  • 你错过了“”顺便说一句

标签: java mysql sql jpa jpql


【解决方案1】:

您不必编写多个查询。只需为运算符使用一个变量,如下所示:

String query = "SELECT i FROM Item i \n" +
                "WHERE i.weight " + operator + " :weight \n" +
                "AND i.height " + operator2 + " :height";

【讨论】:

  • 可能我描述的不是很清楚。您的解决方案很好,但我在考虑“@NamedQuery”。所以我想用像你这样的查询来注释一个实体,但在这种情况下它不起作用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-13
  • 2019-08-13
相关资源
最近更新 更多