Java 休眠具有条件的多对多检索列表
我正在使用Java 休眠具有条件的多对多检索列表,java,hibernate,Java,Hibernate,我正在使用hibernate和java。我有一个组类和一个用户类。它们共享多对多关系,如本ERD所示 我试图实现的是,我想要检索一个组列表,条件是它们包含一个具有特定用户id的用户 在GroupDao中,我定义了一个函数retrieveForUser,在该函数中,我尝试使用hibernate查询语言检索列表: public List<Group> retrieveForUser(int userid){ Session session = HibernateUtil.getS
hibernate
和java
。我有一个组
类和一个用户
类。它们共享多对多
关系,如本ERD
所示
我试图实现的是,我想要检索一个组列表,条件是它们包含一个具有特定用户id的用户
在GroupDao
中,我定义了一个函数retrieveForUser
,在该函数中,我尝试使用hibernate查询语言检索列表
:
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;
}
我收到以下错误消息:
java.lang.ClassCastException: java.util.HashMap cannot be cast to nl.hu.jelo.domain.group.Group
问题
如何实现它,使我最终得到一个列表
,其中只包含一个用户
、具有特定用户id的组
,您无需设置结果转换器<代码>别名到实体映射
用于其他目的
干脆
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);
这已经足够好了
有些离题,您确定要这样手动处理事务吗?您不需要设置结果转换器<代码>别名到实体映射
用于其他目的
干脆
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);
这已经足够好了
有些离题,您确定要这样手动处理事务吗?setResultTransformer(Transformers.ALIAS\u to\u ENTITY\u MAP)代码>不是必需的。为什么要这样写?setResultTransformer(Transformers.ALIAS\u TO\u ENTITY\u MAP)代码>不是必需的。你为什么这么说?