Hi,
ich versuche folgendes HQL Statement in Criteria zu überführen, damit ich weitere Restrictions einfach per Example hinzufügen kann:
[HQL]select distinct m1
from MitarbeiterImpl m1
left join fetch m1.ergoEinschraenkungen e1
where m1.id in (
select m2.id
from MitarbeiterImpl m2
left join m2.ergoEinschraenkungen e2
where e2.code in ( :codes )
)[/HQL]
Mein Criteria sieht so aus:
Ich kriege aber immer eine Exception, die sehr nichtssagend ist:
Die Klasse MitarbeiterImpl ist selbstverständlich als Hibernate Entity gemappt.
Wie muss das Criteria aussehen, damit es funktioniert?
Grüße byto
ich versuche folgendes HQL Statement in Criteria zu überführen, damit ich weitere Restrictions einfach per Example hinzufügen kann:
[HQL]select distinct m1
from MitarbeiterImpl m1
left join fetch m1.ergoEinschraenkungen e1
where m1.id in (
select m2.id
from MitarbeiterImpl m2
left join m2.ergoEinschraenkungen e2
where e2.code in ( :codes )
)[/HQL]
Mein Criteria sieht so aus:
Java:
Criteria c = getCurrentSession().createCriteria(MitarbeiterImpl.class, "m1");
c.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
c.createAlias("m1.ergoEinschraenkungen", "e1", Criteria.LEFT_JOIN);
DetachedCriteria subQuery = DetachedCriteria.forClass(MitarbeiterImpl.class, "m2")
.add(Restrictions.in("m2.ergoEinschraenkungen.code", codes))
.setProjection(Projections.property("m2.id"));
c.add(Subqueries.in("m1.id", subQuery));
Ich kriege aber immer eine Exception, die sehr nichtssagend ist:
Code:
Caused by: org.hibernate.MappingException: Unknown entity: null
at org.hibernate.impl.SessionFactoryImpl.getEntityPersister(SessionFactoryImpl.java:550)
at org.hibernate.loader.criteria.CriteriaQueryTranslator.getPropertyMapping(CriteriaQueryTranslator.java:518)
at org.hibernate.loader.criteria.CriteriaQueryTranslator.getType(CriteriaQueryTranslator.java:477)
at org.hibernate.loader.criteria.CriteriaQueryTranslator.getTypeUsingProjection(CriteriaQueryTranslator.java:459)
at org.hibernate.criterion.InExpression.getTypedValues(InExpression.java:49)
at org.hibernate.loader.criteria.CriteriaQueryTranslator.getQueryParameters(CriteriaQueryTranslator.java:251)
at org.hibernate.criterion.SubqueryExpression.createAndSetInnerQuery(SubqueryExpression.java:112)
at org.hibernate.criterion.SubqueryExpression.toSqlString(SubqueryExpression.java:48)
at org.hibernate.loader.criteria.CriteriaQueryTranslator.getWhereCondition(CriteriaQueryTranslator.java:334)
at org.hibernate.loader.criteria.CriteriaJoinWalker.<init>(CriteriaJoinWalker.java:90)
at org.hibernate.loader.criteria.CriteriaJoinWalker.<init>(CriteriaJoinWalker.java:59)
at org.hibernate.loader.criteria.CriteriaLoader.<init>(CriteriaLoader.java:67)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1550)
at org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:283)
at de....dao.hibernate.GenericDaoHibernate.listResult(GenericDaoHibernate.java:109)
at de.....dao.hibernate.MitarbeiterDaoHibernate.findByPage(MitarbeiterDaoHibernate.java:108)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:310)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:138)
... 94 more
Die Klasse MitarbeiterImpl ist selbstverständlich als Hibernate Entity gemappt.
Wie muss das Criteria aussehen, damit es funktioniert?
Grüße byto
Zuletzt bearbeitet: