如何在hibernate hql中使用内连接最快

时间:2014-08-14 09:39:05

标签: sql hibernate hql

我有3个实体:问题,测试和类别。问题链接到他的测试,类别有她的测试的链接,我不是很好的hql查询,我尝试了几个他们不工作:"select q from Question q where q.test in (select c.tests from Category c where c.id=:categoryId)"有以下错误:“无法提取ResultSet”

Query query = getEntityManager().createQuery(
                "select q from Question q where q.test in (select c.tests from Category c where c.id=:categoryId)");
query.setParameter("categoryId", category.getId());
return query.getResultList();

2 个答案:

答案 0 :(得分:0)

您正在使用EntityManager,因此通过调用createQuery您实际上使用的是Java持久性查询而不是HQL。

要使用HQL,您需要获取Hibernate Session,您可以使用:

((Session)getEntityManager().getDelegate()).createQuery("yourquery")

看看是否能解决问题,我读过JQL在IN条款中存在一些问题。

答案 1 :(得分:0)

如果relation是One to Many,否则使用elements()函数来测试事件。

String hql ="select q form Question q " +
            "join q.category category " + 
            "where category.id = :id ";

return sessionFactory.getCurrentSession().createQuery(hql)
        .setLong("id", categoryId)
        .list();