【发布时间】:2011-09-27 19:44:30
【问题描述】:
我在使用 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) 也没关系。难道我做错了什么?任何帮助将不胜感激。
【问题讨论】:
-
你的 cb.isNull 应该是 isNotNull。您是否尝试添加更多限制和/或尝试明确定义您的连词?
标签: criteria jpa-2.0 eclipselink query-builder