Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何在hibernate hql中使用内部联接_Sql_Hibernate_Hql - Fatal编程技术网

Sql 如何在hibernate hql中使用内部联接

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

我有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 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,对象映射项目即将完成,此查询仅用于不在一页上显示所有问题,如果将关系设置为分式,则需要进行大量更改。问题没有指向类别的链接。在这种情况下,发布代码实体模型,你张贴的问题不太清楚。