Sql 如何在hibernate hql中使用内部联接
我有3个实体:问题、测试和类别。问题有到他的测试的链接,类别有到她的测试的链接,我不太擅长hql查询,我尝试了几个,但都不起作用:从问题q中选择q,其中q.test在从类别c中选择c.tests,其中c.id=:categoryId,错误如下:无法提取结果集Sql 如何在hibernate hql中使用内部联接,sql,hibernate,hql,Sql,Hibernate,Hql,我有3个实体:问题、测试和类别。问题有到他的测试的链接,类别有到她的测试的链接,我不太擅长hql查询,我尝试了几个,但都不起作用:从问题q中选择q,其中q.test在从类别c中选择c.tests,其中c.id=:categoryId,错误如下:无法提取结果集 Query query = getEntityManager().createQuery( "select q from Question q where q.test in (select c.tests
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();
您使用的是EntityManager,因此通过调用createQuery,您实际上使用的是Java持久性查询,而不是HQL 要使用HQL,您需要获取Hibernate会话,为此您可以使用:
((Session)getEntityManager().getDelegate()).createQuery("yourquery")
看看这是否解决了问题,我已经读过JQL在IN子句中有一些问题。如果关系是一对多,否则使用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();
请发布您的代码我认为使用HQL是不好的,如果在项目中的所有其他地方都使用JPQ,有没有可以在JPQ中使用的查询?这个查询可以吗?从问题q中选择q加入q.test t其中t.category.categoryId=:categoryIdwell您不能使该关系双向吗?有时这确实有助于缓解问题,否则,请发布完整的stacktrace,对象映射项目即将完成,此查询仅用于不在一页上显示所有问题,如果将关系设置为分式,则需要进行大量更改。问题没有指向类别的链接。在这种情况下,发布代码实体模型,你张贴的问题不太清楚。