-1

Spring プロジェクトを Hibernate から ObjectDB に移行しようとしています。ObjectDB ページでは、ObjectDB は JPA と 100% 互換性があると書かれています。ただし、この JPQL クエリには問題があります。

SELECT e FROM Employee e WHERE e.present = false AND NOT EXISTS 
(SELECT c FROM Computer c WHERE c.employeeEntity = e) 
ORDER BY e.name

Hibernate では、このクエリに問題はありませんでしたが、ObjectDB は例外をスローします。

com.objectdb.o.UserException: Unexpected query token 'EXISTS'

2番目の問題は、基準言語にあります。このコード:

In<Employee> inExpression = cb.in(root.get(Computer_.employeeEntity));
for (Long id : emplIds) {
    Employee e = new Employee(id);
    inExpression = inExpression.value(e);
}
list.add(inExpression);

Hibernateで作業していましたが、ObjectDBでスローしています:

com.objectdb.o.UserException: Unexpected query token ':l2'
at com.objectdb.o.MSG.d(MSG.java:61)
at com.objectdb.o.TKN.J(TKN.java:765)
at com.objectdb.o.QNF.B(QNF.java:894)
at com.objectdb.o.QNF.I(QNF.java:1294)
at com.objectdb.o.QNF.k(QNF.java:315)
at com.objectdb.o.QNF.H(QNF.java:1270)
at com.objectdb.o.QNF.k(QNF.java:210)
at com.objectdb.o.QNF.t(QNF.java:611)
at com.objectdb.o.QNF.t(QNF.java:605)
at com.objectdb.o.QNF.k(QNF.java:218)
at com.objectdb.o.QNF.j(QNF.java:135)
at com.objectdb.o.QRC.z(QRC.java:321)
at com.objectdb.o.QRC.v(QRC.java:212)
at com.objectdb.o.QRC.u(QRC.java:166)
at com.objectdb.o.QRM.U6(QRM.java:250)
at com.objectdb.o.MST.U6(MST.java:933)
at com.objectdb.o.WRA.U6(WRA.java:291)
at com.objectdb.o.WSM.U6(WSM.java:113)
at com.objectdb.o.STC.r(STC.java:449)
at com.objectdb.o.SHN.aj(SHN.java:489)
at com.objectdb.o.SHN.K(SHN.java:156)
at com.objectdb.o.HND.run(HND.java:132)
at java.lang.Thread.run(Unknown Source)

これらの問題を解決する方法を知っている人はいますか?

ミラノ

4

1 に答える 1

3

com.objectdb.o.UserException: 予期しないクエリ トークン 'EXISTS'

ObjectDB は知りませんEXISTShttp://www.objectdb.com/java/jpa/query/jpql/comparisonを参照してください。

IS NOT NULL代わりに、存在を検証するために使用できます。SELECT c FROM Computer c WHERE c.employeeEntity = e複数行の結果セットではなく、単一のインスタンスを返す必要があることに注意してください。

これは ObjectDB の問題ではありません。SQL/SQL 方言に根ざしているためです。

https://stackoverflow.com/a/6808503/1549387を参照してください。

com.objectdb.o.UserException: 予期しないクエリ トークン ':l2'

これのスタックトレースを印刷できますか? 不明な名前付きパラメーターのようです。生成された SQL を表示するために、ロギング レベルを FINE または FINEST に送信できますか?

于 2013-04-24T08:39:33.753 に答える