我正在使用hibernate
和java
。我有一个Group
班和一个User
班。他们共享many-to-many
关系,如ERD
所示。
我想要实现的是,我想要检索一个组列表,条件是它们包含User
并具有某个User_id
。
在GroupDao
我定义了一个函数retrieveForUser
,我在其中尝试使用hibernate query language
检索列表:
public List<Group> retrieveForUser(int userid){
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
String hql = "select distinct g from Group g " +
"join g.allGroupMembers u " +
"where u.id = :id";
Query query = session.createQuery(hql).setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
query.setParameter("id", userid);
List<Group> list = query.list();
session.getTransaction().commit();
return list;
}
当我尝试使用以下方法遍历结果列表时
for(Group g : groupDao.retrieveForUser(user1.getId())){
System.out.println(g.getName());
}
我收到以下错误消息:
java.lang.ClassCastException: java.util.HashMap cannot be cast to nl.hu.jelo.domain.group.Group
问题
我如何才能实现这一目标,以便最终得到的List<Group>
只有包含User
且具有特定User_id
答案 0 :(得分:0)
您无需设置结果转换器。 ALIAS_TO_ENTITY_MAP
用于其他目的。
简单地做
String hql = "select distinct g from Group g " +
"join g.allGroupMembers u " +
"where u.id = :id";
Query query = session.createQuery(hql);
query.setParameter("id", userid);
足够好了。
有些偏离主题,您确定要手动处理交易吗?