I’ve got a problem with following code. A class id is Long, B class id is an embedded id where one of its fields is A class.
DetachedCriteria dc = DetachedCriteria.forClass(A.class,"a").setProjection(Property.forName("a.id"));
Criteria cr= this.sessionFactory.getCurrentSession().createCriteria(B.class,"b").add(Subqueries.in("b.id.a.id", dc));
List<B> bb = cr.list();
This gives exception:
java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Long
But this:
List<Long> dd = this.sessionFactory.getCurrentSession().createCriteria(A.class,"a").setProjection(Property.forName("a.id")).list();
Criteria cr= this.sessionFactory.getCurrentSession().createCriteria(B.class,"b").add(Restrictions.in("b.id.a.id", dd));
List<B> bb = cr.list();
works. What am I doing wrong?
It appeared that “Subqueries.propertyIn” should be used in this situation.