javax.persistence.criteria.CriteriaBuilderを使用したクエリの作成で問題が発生しました。EclipseLink2.1とOracle10gデータベースを使用しています。複数の制限があるクエリを作成する場合、最初の制限のみが使用され、両方は使用されません。
これが私のコードです:
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)を使用するかどうかは関係ありません。私は何か間違ったことをしていますか?どんな助けでもありがたいです。