Mil*_*ler 9 criteria eclipselink query-builder jpa-2.0
我在使用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();
Run Code Online (Sandbox Code Playgroud)
生成的查询是:
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 = ?)
Run Code Online (Sandbox Code Playgroud)
除了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)
Run Code Online (Sandbox Code Playgroud)
如果我使用cb.and(arg1,arg2)也没关系也没关系.难道我做错了什么?任何帮助将不胜感激.
您的查询看起来完全没问题。正如您所提到的,CriteriaQuery.where(Predicate... restrictions)已经使用了谓词的连接,因此无需使用 cb.and()。
我唯一能想象的就是:
endDate永远不会为空?| 归档时间: |
|
| 查看次数: |
10978 次 |
| 最近记录: |