OpenJPA查询生成的SQL语句,为何Or后面没有括号

更新时间:2023-06-03 12:22:54 阅读: 评论:0

赵永贵OpenJPA查询⽣成的SQL语句,为何Or后⾯没有括号
事情就是在上周,我在Eclip⾥写了⼀段查询语句,但是根据OpenJPA⽣成的SQL语句查询出来的数据,和预期的不⼀样。通过查看OpenJPA⽣成的SQL语句,终于发现OpenJPA在Or之前吞掉了我的括号。
现在,我们来还原⼀下现场,我最初的JPA查询语句是这样写的:
虎妈SELECT b FROM BorrowDocument b where b.borrowApprove.approveStatus= 'Approved' and给领导送礼说什么
(b.borrowApprove.borrowDocumentType = 'ElectronicBorrow'  or (b.borrowApprove.borrowDocumentType = 'PaperBorrow' and b.bookStatus = 'Returned'))
OpenJPA⽣成的语句是这样的:
SELECT t0.PK_BORROWDOCUMENT_ID, t0.bookCount, t0.bookStatus,
t1.PK_BORROWAPPROVE_ID, t1.applyTime, t1.approveComments,
t1.approveStatus, t1.approveTime, t1.approverId, t1.approverName,
t1.borrowDocumentType, t1.borrowProcessType, t1.borrowPurpo,
看小品
t1.borrowType, t1.borrowerDept, t1.borrowerId, t1.borrowerName,
感情英语
t1.processId, t1.returnDate, t0.borrowCopies, t0.docId, t0.docName,
深蹲怎么做
t0.isFixed, t0.lendTime, t0.lentCount, t0.recordCode, t0.returnCount,
制作灯笼的作文FROM T_SYNM_BORROWDOCUMENT t0, T_SYNM_BORROWAPPROVE t1
WHERE (t1.approveStatus = ? AND (t1.borrowDocumentType = ? OR
t1.borrowDocumentType = ? AND t0.bookStatus = ?)) AND
t0.BORROWAPPROVEID = t1.PK_BORROWAPPROVE_ID AND ROWNUM <= ?
读书感想怎么写
[params=?, ?, ?, ?, ?]
通过对⽐,可以发现OpenJPA在or (b.borrowApprove.borrowDocumentType = 'PaperBorrow' and
b.bookStatus = 'Returned'))之后,⽣成SQL语句的过程中,Or后⾯的括号并没有被添加上。这是为什么呢?如果我们将Or后⾯的条件置前,是不是⽣成SQL语句还是没有括号。带着这个疑问,我将Or的条件置前了。
SQL查询语句是这样的:
SELECT b FROM BorrowDocument b where b.borrowApprove.approveStatus= 'Approved' and
((b.borrowApprove.borrowDocumentType = 'PaperBorrow' and b.bookStatus = 'Returned') or
(b.borrowApprove.borrowDocumentType = 'ElectronicBorrow'))
OpenJPA⽣成的语句是这样的:
可以看出,这次OpenJPA仍然没有在⽣成SQL语句Or后⾯加上括号,但是这次的查询结果却是正确的。这是为什么呢?根据运算符的优先级顺序,or总是在And之后,OpenJPA为提⾼查询效率,在第⼀层总是尽可能的过滤掉更多的数据,如果将or提前查询,第⼀层过滤的数据就会减少,从⽽造成查询效率低下。OpenJPA⾃以为是的过滤掉了我所添加的括号,只不过现在是查询出来的数据完全是错误的数据了。
通过OpenJPA查询所出现的⼀个⼩问题,提醒我。不要只是把功能放在第⼀位,简单、⾼效的程序才是程序员应该追求的⽬标。

本文发布于:2023-06-03 12:22:54,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/847580.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:查询   语句   数据   括号   程序员   没有   应该   出来
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图