Подзапрос внутри подзапроса с использованием hibernate DetachedCriteria - PullRequest
0 голосов
/ 21 сентября 2018

Мне нужно выполнить следующий sql-запрос с использованием Hibernate:

select * from Entity1 where Entity1.entity2 in 
(select id from Entity2 where Entity2.entity3 in 
(select id from Entity3 where Entity3.isImportant))

Для этого может подойти DetachedCriteria.Поэтому я попытался его использовать, но при запуске подзапроса внутри другой ошибки DetachedCriteria.

Criteria cr = getSession().createCriteria(Entity1.class);
cr.createAlias("entity2", "e2");

DetachedCriteria entity2SubQuery = 
DetachedCriteria.forClass(Entity2.class, "entity2"); 
entity2SubQuery.setProjection(Projections.distinct(property("entity2.id")));

DetachedCriteria entity3SubQuery = DetachedCriteria.forClass(Entity3.class, "entity3");
entity3SubQuery.setProjection(Projections.distinct(property("entity3.id")));

entity2SubQuery.add(Subqueries.propertyIn("entity2.entity3", entity3SubQuery));
cr.add(Subqueries.propertyIn("e2.id", entity2SubQuery));

return cr;

Здесь я прикрепил исключение

- Exception 
java.lang.NullPointerException: null
at org.hibernate.loader.criteria.CriteriaQueryTranslator.getProjectedTypes(CriteriaQueryTranslator.java:382)
at org.hibernate.criterion.SubqueryExpression.createAndSetInnerQuery(SubqueryExpression.java:135)
at org.hibernate.criterion.SubqueryExpression.getTypedValues(SubqueryExpression.java:96)
at org.hibernate.loader.criteria.CriteriaQueryTranslator.getQueryParameters(CriteriaQueryTranslator.java:329)
at org.hibernate.criterion.SubqueryExpression.createAndSetInnerQuery(SubqueryExpression.java:134)
...

Спасибо

...