我正在尝试将我的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'
第二个问题是标准语言。这段代码:
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)
有人知道如何解决这些问题吗?
米兰
答案 0 :(得分:3)
com.objectdb.o.UserException:意外的查询标记'EXISTS'
ObjectDB不知道EXISTS
。请参阅http://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'
你能打印出这个堆栈的痕迹吗?它看起来像一个未知的命名参数。您是否可以将日志记录级别发送到FINE或FINEST以查看生成的SQL?