加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

criteria – Jpa QueryBuilder where子句中的多个表达式不起作用

发布时间:2020-12-15 00:42:21 所属栏目:Java 来源:网络整理
导读:我在使用 javax.persistence.criteria.CriteriaBuilder创建查询时遇到问题.我正在使用 EclipseLink 2.1和Oracle 10g数据库.在构建具有多个限制的查询时,它将仅使用第一个限制,而不是两个限制. 这是我的代码: CriteriaBuilder cb = getEm().getCriteriaBuild
我在使用 javax.persistence.criteria.CriteriaBuilder创建查询时遇到问题.我正在使用 EclipseLink 2.1和Oracle 10g数据库.在构建具有多个限制的查询时,它将仅使用第一个限制,而不是两个限制.

这是我的代码:

CriteriaBuilder cb = getEm().getCriteriaBuilder();
CriteriaQuery<Assignment> query = cb.createQuery(Assignment.class);
Root<Assignment> assignment = query.from(Assignment.class);

query.where(
    cb.equal(assignment.get("request"),request),cb.isNull(assignment.get("endDate")));

return getEm().createQuery(query).getResultList();

生成的查询是:

SELECT ASSX_ID,END_DATE,BEGIN_DATE,COMMENTS,ASSX_OER_ASSIGNED_TO_ID,OER_OER_ID_ASSIGNED_BY,ASSX_RQST_ID 
FROM TARTS.ASSIGNMENT_XREF 
WHERE (ASSX_RQST_ID = ?)

除了where子句外,它看起来不错.我期待:

SELECT ASSX_ID,ASSX_RQST_ID FROM TARTS.ASSIGNMENT_XREF 
WHERE (ASSX_RQST_ID = ? AND BEGIN_DATE IS NOT NULL)

如果我使用cb.and(arg1,arg2)也没关系.难道我做错了什么?任何帮助将不胜感激.

解决方法

您的查询看起来非常好.正如您所提到的,CriteriaQuery.where(谓词…限制)已经使用了谓词的结合,因此不需要使用cb.and().

我唯一能想到的东西:

> EclipseLink中的错误(与Hibernate一样)>某种优化,也许endDate可能永远不会为空?>你的getEm()方法做了一些奇怪的事情

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读