我在Hibernate中使用JPA,今天我看到了一個奇怪的行爲。Hibernate在內部查詢中使用in子句中的奇怪行爲
下面的查詢工作正常:
select x.fichaCaracterizacao.id
from FichaParecer x
where x.departamento in :departamentos
但是,如果我在內部查詢中使用它,它拋出一個異常,如下所示:
select p.fichaCaracterizacao.id
from FichaParecer p
where 1=1 and
p.id in (select x.fichaCaracterizacao.id
from FichaParecer x
where x.departamento in :departamentos)
它拋出以下異常:
Caused by: java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: , near line 1, column 244 [select p.fichaCaracterizacao.id from br.ufscar.siga.cadastrosgerais.entity.FichaParecer p where 1=1 and p.id in (select x.fichaCaracterizacao.id from br.ufscar.siga.cadastrosgerais.entity.FichaParecer x where x.departamento in :departamentos0_, :departamentos1_, :departamentos2_)]
at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1348) [hibernate-entitymanager-4.0.1.Final.jar:4.0.1.Final]
at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1289) [hibernate-entitymanager-4.0.1.Final.jar:4.0.1.Final]
at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:261) [hibernate-entitymanager-4.0.1.Final.jar:4.0.1.Final]
只有當「departamentos」集合有多個項目時纔會發生這種情況。
Hibernate是否支持這個?或者我做錯了什麼?
編輯:我使用Hibernate的4.0.1.Final
請小心'IN'列表。數據庫對可能在這些列表中的元素數量施加限制。如果要從SQL語句(子查詢)中生成列表,請特別小心。 –