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

我在使用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, 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 = ? AND BEGIN_DATE IS NOT NULL)

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


你的查询看起来非常好。 正如你所提到的, CriteriaQuery.where(Predicate... restrictions)已经使用谓词的连接,所以不需要使用cb.and()。

我能想象的唯一的事情:

  • EclipseLink中的错误(尝试与Hibernate相同)
  • 某种优化,也许endDate可能永远不会为空?
  • 你的getEm()方法会做一些奇怪的事情
  • 链接地址: http://www.djcxy.com/p/53523.html

    上一篇: Jpa QueryBuilder Multiple expressions in where clause not working

    下一篇: What kind of json answer starts with )]}'