Hibernate具有条件的多对多检索列表

时间:2015-06-25 08:07:25

标签: java hibernate

我正在使用hibernatejava。我有一个Group班和一个User班。他们共享many-to-many关系,如ERD 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

的群组

1 个答案:

答案 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);

足够好了。

有些偏离主题,您确定要手动处理交易吗?