別のクエリの結果によって、Hibernate Criteriaクエリの結果セットを絞り込もうとしています。私はJPQLでこの問題を解決する方法を知っています:サブクエリによるクエリ結果の絞り込み
FROM DocPackage p WHERE
EXISTS (SELECT g
FROM ObjectGroup g JOIN g.items i, Person per
WHERE g=p.applicantGroup
AND i.objectClass = 'org.cp.model.common.Person'
AND i.objectId=per.id
AND lower(concat(per.firstName,' ',per.lastName)) like :applicant
)
しかし、私はどのようにこのようなクライテリアを作成するのか想像できません。この選択を基準でどのように実装するかについての考え方はありますか? Hibernate 3.3が使用されます。
UPD:私は、次の基準クエリを作りました。この問題を解決しようとすると:
Criteria resultCriteriaQuery = this.hibernateSession.createCriteria(DocPackage.class, "pack");
DetachedCriteria personSubquery = DetachedCriteria.forClass(Person.class, "pers").
add(Restrictions.like("pers.loFstLstName", "%" + searchObject.getApplicant().toLowerCase() + "%")).
add(Restrictions.eqProperty("itm.objectId", "pers.id"));
DetachedCriteria applicantsSubquery = DetachedCriteria.forClass(ObjectGroup.class, "objGrp").
add(Restrictions.eqProperty("pack.applcantGroup", "objGrp")).
createAlias("objGrp.items", "itm").
add(Restrictions.eq("itm.objectClass", "org.cp.model.common.Person")).
add(Subqueries.exists(personSubquery));
resultCriteriaQuery.add(Subqueries.exists(applicantsSubquery));
しかし、それは動作しません。私はNullPointerException
をresultCriteriaQuery.list()
に持っています。このクエリで何が問題になっていますか?何か案は?