0

Hibernate で JPA を使用していますが、今日、奇妙な動作が見られました。

次のクエリは正常に機能します。

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を使用しています

4

2 に答える 2

2

おそらく in 句を次のように記述する必要がある古いバージョンの Hibernate を使用しているでしょう。

where x.departamento in (:departamentos)
于 2013-06-01T21:54:53.237 に答える
0

ネストされたINリストを回避するために、自己結合を使用することもできます。

SELECT p1.fichaCaracterizacao.id 
  FROM FichaParecer p1
    INNER JOIN FichaParecer p2
  WHERE p1.id = p2.fichaCaracterizacao.id 
    AND p2.departamento in :departamentos
于 2013-06-01T22:06:47.980 に答える