在HQL查询

时间:2017-11-16 17:59:15

标签: hibernate hql

如何在HQL查询中检查同一类实例的arraylist中是否存在对象?

为了便于理解,我将粘贴我正在尝试完成此操作的整个方法:

   public List<Relation> findRelations(List<Organisation> subjectOrganisations) {
    return emFactory.get()
            .createQuery("FROM Relation rel WHERE rel.subject.id in (SELECT r.id FROM RelationEntityOrganisation r where r.organisation in :subjectOrganisations)", Relation.class)
            .setParameter("subjectOrganisations", subjectOrganisations).getResultList();
}

我认为问题是由于我试图以非法方式检查ArrayList中组织实例的存在,即查询的“where r.organisation in :subjectOrganisations”部分。

这是我尝试运行查询时得到的错误堆栈跟踪:

  

java.lang.IllegalArgumentException:org.hibernate.hql.internal.ast.QuerySyntaxException:意外令牌:)靠近第1行,第192列[FROM com.company.you.server.domain.entity.Relation rel WHERE rel。 subject.id in(SELECT r.id FROM com.company.you.server.domain.entity.RelationEntityOrganisation r where r.organisation in)]       在   (......)   引起:org.hibernate.hql.internal.ast.QuerySyntaxException:意外令牌:)靠近第1行,第192列[FROM com.Caused by:org.hibernate.hql.internal.ast.QuerySyntaxException:意外令牌:)近线1,第192列[FROM com.company.you.server.domain.entity.Relation rel WHERE rel.subject.id in(SELECT r.id FROM com.company.you.server.domain.entity.RelationEntityOrganisation r其中r。组织in)]   (......)       at org.hibernate.internal.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:301)       在org.hibernate.internal.SessionImpl.list(SessionImpl.java:1254)       在org.hibernate.internal.QueryImpl.list(QueryImpl.java:103)       在org.hibernate.jpa.internal.QueryImpl.list(QueryImpl.java:573)       在org.hibernate.jpa.internal.QueryImpl.getResultList(QueryImpl.java:449)       ...还有60多个

我已经找到了this文章,但它没有回答我的问题,因为我想将一个ArrayList类型的数组注入HQL。

我希望有人可以帮助我。

0 个答案:

没有答案