2011-12-17 201 views
0

我遇到了以下代码的问题。类ID是Long,B类id是嵌入式ID,其中一个字段是A类。Hibernate子查询上的ClassCastException

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(); 

这给了异常:

java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Long 

但这:

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(); 

作品。我究竟做错了什么?

回答

10

在这种情况下应该使用“Subqueries.propertyIn”。