无法在H2数据库中使用联接

时间:2019-02-26 03:24:00

标签: java hibernate join h2 in-memory-database

当使用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的问题是什么吗?

1 个答案:

答案 0 :(得分:0)

问题是在开始执行应用程序时,drop-recreate脚本中缺少序列对象之一(与Hibernate / Spring无关)。在H2中分别运行脚本,并将其与另一组create / drop语句进行比较,以找出后者的作品,而不是前者。

非常奇怪的是,H2完全因此崩溃了,并且当没有JOIN的简单查询可以正常工作时,它们不会让其中包含JOIN的语句执行。