Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.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
Java Hibernate左连接返回对象_Java_Hibernate - Fatal编程技术网

Java Hibernate左连接返回对象

Java Hibernate左连接返回对象,java,hibernate,Java,Hibernate,我正在执行一个返回对象而不是自定义类的查询: Query q = em.createQuery("FROM Author a LEFT JOIN a.documents d LEFT JOIN d.personDocuments pd WHERE pd.person = :person ORDER BY a.lastName"); q.setParameter("person", person); return new HashSet<Author>(q.getResultList(

我正在执行一个返回对象而不是自定义类的查询:

Query q = em.createQuery("FROM Author a LEFT JOIN a.documents d LEFT JOIN d.personDocuments pd WHERE pd.person = :person ORDER BY a.lastName");
q.setParameter("person", person);
return new HashSet<Author>(q.getResultList());
Query q=em.createQuery(“来自作者a LEFT JOIN a.documents d LEFT JOIN d.personDocuments pd其中pd.person=:person ORDER BY a.lastName”);
q、 setParameter(“person”,person);
返回新的HashSet(q.getResultList());

我希望q.getResultList()会返回一个作者列表(及其链接文档),但它是一个对象列表。我做错了什么?

没有键入来自的方法
getResultList()

因此,它似乎只返回
对象
(在您的情况下,这些对象实际上是
作者
的实例),您必须手动将其转换为
作者
。(例如,您可以通过检查实例上的
getClass()
来检查
对象的实际情况。)

您可以使用for类型化查询,它将根据您的需要工作

TypedQuery<Author> q = em.createQuery("SELECT a FROM Author a LEFT JOIN a.documents d LEFT JOIN d.personDocuments pd WHERE pd.person = :person ORDER BY a.lastName", Author.class);
q.setParameter("person", person);
return new HashSet<Author>(q.getResultList());

objectdb中的TypedQuery覆盖得非常好。

未键入来自的方法
getResultList()

因此,它似乎只返回
对象
(在您的情况下,这些对象实际上是
作者
的实例),您必须手动将其转换为
作者
。(例如,您可以通过检查实例上的
getClass()
来检查
对象的实际情况。)

您可以使用for类型化查询,它将根据您的需要工作

TypedQuery<Author> q = em.createQuery("SELECT a FROM Author a LEFT JOIN a.documents d LEFT JOIN d.personDocuments pd WHERE pd.person = :person ORDER BY a.lastName", Author.class);
q.setParameter("person", person);
return new HashSet<Author>(q.getResultList());

来自objectdb的TypedQuery非常好地涵盖了它。

我认为“它将返回对象”是误导性的。它正在返回作者,但没有类型化变量来访问他们,也没有方法签名的保证。@his这就是我的意思:D我将尝试重新措辞并使其更清楚。感谢您的回复,但还没有完全回复:
TypedQuery q=em.createQuery(“FROM Author a LEFT JOIN a.documents d LEFT JOIN d.personDocuments pd WHERE pd.person=:person ORDER BY a.lastName”,Author.class);
告诉我:
无法使用请求的结果类型为具有多个返回的查询创建TypedQuery
@user485659将选择a添加到查询的开头我认为“它将返回对象”“这是误导。它正在返回作者,但没有类型化变量来访问他们,也没有方法签名的保证。@his这就是我的意思:D我将尝试重新措辞并使其更清楚。感谢您的回复,但还没有完全回复:
TypedQuery q=em.createQuery(“FROM Author a LEFT JOIN a.documents d LEFT JOIN d.personDocuments pd WHERE pd.person=:person ORDER BY a.lastName”,Author.class);
告诉我:
无法使用请求的结果类型为具有多个返回的查询创建TypedQuery
@user485659将SELECT a添加到查询的开头