当使用H2(1.3.168)作为本地数据库通过Java Hibernate执行某些查询时,我遇到一个奇怪的问题。看来,Hibernate试图执行一系列SELECT语句,但是其中一个失败却出现了模糊的错误。
日志文件报告确实成功执行的一些SELECT语句只有一个参与表,例如从T1位置选择... ...
但是,当它到达该语句中的一个简单的LEFT OUTER JOIN语句时,会产生以下错误:
General error: "java.lang.NoClassDefFoundError: org/h2/table/TableFilter$2" [50000-168]
我接受了Hibernate报告的完全相同的查询,并尝试直接在H2控制台中执行它。同样的错误。
我用一个简单的JOIN替换了LEFT OUTER JOIN,同样的错误。我从JOIN中删除了第二个表,而从第一个表中仅选择了SELECT,它进行SELECT就好了。单独对第二个表进行了相同的操作,没有问题,例如
SELECT * FROM T1;
尝试了其他带有联接的表...错误再次出现。
SELECT * FROM T1 t1 JOIN T2 t2 ON t1.pk_id = t2.fk_id;
有人知道H2的问题是什么吗?
答案 0 :(得分:0)
问题是在开始执行应用程序时,drop-recreate脚本中缺少序列对象之一(与Hibernate / Spring无关)。在H2中分别运行脚本,并将其与另一组create / drop语句进行比较,以找出后者的作品,而不是前者。
非常奇怪的是,H2完全因此崩溃了,并且当没有JOIN
的简单查询可以正常工作时,它们不会让其中包含JOIN
的语句执行。