【问题标题】:Java Named QueryJava 命名查询
【发布时间】:2017-10-26 08:59:37
【问题描述】:

我正在尝试创建一个 Java 命名查询,它执行以下 postgres 查询:

select * from call_attempt where result is NULL and id like '0000000101%';

0000000101 在我的代码中设置为 id,所以这是我想要做的,但它的格式不正确:(我不确定如何在使用 % 时设置 id 字段,它必须在 ' ' 内)

@NamedQuery(name = AttemptEntity.JQL.NOTENDED,
                       query = "SELECT ae FROM AttemptEntity ae WHERE ae.result IS NULL,"
                             + " ae.correlationId LIKE '=:id%'")

【问题讨论】:

  • WHERE 子句中有一个逗号,还缺少一个AND

标签: java jpql named


【解决方案1】:

首先,您忘记了and,并将其替换为逗号。

其次,% 必须作为参数的一部分传递:

SELECT ae FROM AttemptEntity ae WHERE ae.result IS NULL
and ae.correlationId LIKE :id

然后,在执行查询时:

String id = "0000000101%";
query.setParameter("id", id);

【讨论】:

  • 这仍然是格式错误的结尾 @NamedQuery(name = AttemptEntity.JQL.NOTENDED, query = "SELECT ae FROM AttemptEntity ae WHERE ae.result IS NULL," + " AND ae.correlationId LIKE :id ")
  • 再次,删除 IS NULL 后的逗号。
  • 我在 NULL 之后删除了那个逗号,现在看起来还可以。谢谢。
【解决方案2】:

NamedQuery 中不能包含 %,但可以在分配参数的值中包含它。

query.setParamter("id", 0000000101+ "%");

还需要在NULL后面加上AND,去掉逗号。

参考:Named Query with like in where clause

【讨论】:

    猜你喜欢
    • 2011-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多