【问题标题】:What is the equivalent of '||' (concat) in Entitymanager java query?'||' 的等价物是什么(concat) 在 Entitymanager java 查询中?
【发布时间】:2013-10-31 09:43:36
【问题描述】:

我想将一个oracle存储过程重写为java代码,在查询字符串中选择具有连接值的数据进行比较,方法如下:

 Query qString = 
                        "SELECT Obj " +
                        "FROM MyTable Obj2 WHERE ( Obj2.value1 || Obj2.value2 ) in " +
                        "(SELECT Obj2.value1 || MAX(Obj2.value2) FROM MyTable Obj2 WHERE Obj2.value2 >= :param GROUP BY Obj2.value1) " +
                        "ORDER BY Obj.value2, Obj.value1";

                        query = entityManager.createQuery(qString);
                        query.setParameter("param ", param );

当我在 weblogic 服务器上将查询作为 web 服务运行时,“|”出现错误特点。 我可以用什么来代替 ||运算符得到相同的结果?

【问题讨论】:

  • 这是无效的 jpa 查询。但是,我无法理解该查询。 SELECT Obj2.value1 || MAX(Obj2.value2) 是串联吗?
  • 答案没有解决你的问题吗?
  • @vels4j 是的,它在 Oracle 中。
  • @vels4j:这完全有效。 (标准)SQL 连接运算符是 ||,尽管一些 DBMS 选择忽略该标准。
  • 我删除了两个明显不正确的右括号。由于这些括号不会影响您的问题,因此我将其作为编辑而不是答案,并将此评论留在这里,以便您了解此更改。如果@nos 解决方案适合您(我认为应该),那么请接受他的回答。

标签: java sql oracle entitymanager concat


【解决方案1】:

Java Persistence Query Language 提供了CONCAT() 函数,所以你应该可以把Obj2.value1 || Obj2.value2写成CONCAT(Obj2.value1, Obj2.value2)

【讨论】:

  • org.eclipse.persistence.exceptions.JPQLException 异常描述:解析查询的语法错误 [...],第 1 行,第 43 列:意外令牌 [CONCAT]。原因:NoViableAltException(16@[646:1: conditionalPrimary 返回 [对象节点] : ( ( LEFT_ROUND_BRACKET conditionalExpression )=> LEFT_ROUND_BRACKET n= conditionalExpression RIGHT_ROUND_BRACKET | n= simpleConditionalExpression );])
  • 我将您的解决方案标记为正确,因为您正确回答了我的问题 :) 我的错我问错了问题来解决我的问题 >: [
猜你喜欢
  • 1970-01-01
  • 2023-03-07
  • 2012-09-28
  • 2012-10-29
  • 2012-01-02
  • 2018-12-17
  • 2013-04-14
  • 2014-04-18
  • 2021-10-18
相关资源
最近更新 更多