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添加到查询的开头