OpenJPA中生成以下其中的SQL部分OpenJPA的产生怪异的SQL语句
WHERE (t3.USERNAME = ? AND CAST(1 AS INTEGER) <> CAST(1 AS INTEGER)
AND t5.USERNAME IS NOT NULL AND 1 = 1 AND 1 = 1 AND 1 = 1)
我刚进了几桌终于做了
Join<SomeEntity, User> userJoin = someJoin.join(SomeEntity_.user);
Path<String> usernamePath = userJoin.get(User_.username);
CriteriaBuilder cb = getCb();
Predicate usernamePredicate = cb.equal(usernamePath, username);
在JPA发送到数据库的SQL怪异的一部分是
CAST(1 AS INTEGER) <> CAST(1 AS INTEGER)
这个表达式永远是错误的。所以永远不会有用户选择。
好,也
1 = 1 AND 1 = 1 AND 1 = 1
表情很古怪,但数据库的查询优化器应该删除他们,因为他们 是永远正确的。
- 有没有人有与OpenJPA生成相同或相似的奇怪的SQL语句?
- 谁能告诉我(希望有人的OpenJPA的开发者)为什么OpenJPA的 产生这种奇怪的声明?
研究的推移
今天,我发现在生成的语句OpenJPA的2.2.1源代码的地方。 我截取了我的调试会话并标记了有趣的地方。
放大1:http://i.stack.imgur.com/LBmzM.png
请问您可以添加评论为什么您投下了这个问题?我不是在开玩笑。 sql语句的where子句由openjpa生成。我将在明天继续进行研究,并快速提供有关我的问题的更多信息。 –
找到生成1 = 1表达式的地方。例如。 http://svn.apache.org/repos/asf/openjpa/tags/2.2.1/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/BindVariableExpression.java –
Is there一种可以插入可放大图像的方式?好的,我找到了一种方法...只需添加图像链接。 –