gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 04:27:12 24 4
gpt4 key购买 nike

我在使用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可能永远不会为null?
  • 您的getEm()方法做了一些奇怪的事情
  • 关于criteria - Jpa QueryBuilder where子句中的多个表达式不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6566326/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com