如何在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。
我希望有人可以帮助我。