不能在 H2 数据库中使用连接
Cannot Use Joins in H2 Database
我 运行 在使用 H2 (1.3.168) 作为本地数据库时通过 Java Hibernate 执行某些查询时遇到了一个奇怪的问题。似乎 Hibernate 试图执行一系列 SELECT 语句,但有一个失败并出现模糊错误。
日志文件报告说,一些 SELECT 语句确实成功执行,只有一个参与 table,例如SELECT ...从 T1 哪里 ...;
但是,当它到达语句中的一个简单的LEFT OUTER JOIN语句时,会产生如下错误:
General error: "java.lang.NoClassDefFoundError: org/h2/table/TableFilter" [50000-168]
我采用了 Hibernate 报告的完全相同的查询,并尝试直接在 H2 控制台中执行它。同样的错误。
我用简单的 JOIN 替换了 LEFT OUTER JOIN,同样的错误。我从 JOIN 中删除了第二个 table,并从第一个 table 中删除了 SELECT,它 SELECT 很好。对第二个 table 自己做了同样的事情,没问题,例如
SELECT * FROM T1;
尝试了一堆其他 table 的连接...错误再次出现。
SELECT * FROM T1 t1 JOIN T2 t2 ON t1.pk_id = t2.fk_id;
有人知道 H2 有什么问题吗?
当应用程序在启动时执行时,问题出在 drop-recreate 脚本中丢失的序列对象之一(与 Hibernate/Spring 无关)。 运行 将脚本分别放在 H2 中,并将其与另一组 create/drop 语句进行比较,以找出后者有效但前者无效。
非常奇怪的是,H2 因此完全崩溃并且不会让其中包含 JOIN
的语句得到执行,而没有 JOIN
的简单查询工作正常。
我 运行 在使用 H2 (1.3.168) 作为本地数据库时通过 Java Hibernate 执行某些查询时遇到了一个奇怪的问题。似乎 Hibernate 试图执行一系列 SELECT 语句,但有一个失败并出现模糊错误。
日志文件报告说,一些 SELECT 语句确实成功执行,只有一个参与 table,例如SELECT ...从 T1 哪里 ...;
但是,当它到达语句中的一个简单的LEFT OUTER JOIN语句时,会产生如下错误:
General error: "java.lang.NoClassDefFoundError: org/h2/table/TableFilter" [50000-168]
我采用了 Hibernate 报告的完全相同的查询,并尝试直接在 H2 控制台中执行它。同样的错误。
我用简单的 JOIN 替换了 LEFT OUTER JOIN,同样的错误。我从 JOIN 中删除了第二个 table,并从第一个 table 中删除了 SELECT,它 SELECT 很好。对第二个 table 自己做了同样的事情,没问题,例如
SELECT * FROM T1;
尝试了一堆其他 table 的连接...错误再次出现。
SELECT * FROM T1 t1 JOIN T2 t2 ON t1.pk_id = t2.fk_id;
有人知道 H2 有什么问题吗?
当应用程序在启动时执行时,问题出在 drop-recreate 脚本中丢失的序列对象之一(与 Hibernate/Spring 无关)。 运行 将脚本分别放在 H2 中,并将其与另一组 create/drop 语句进行比较,以找出后者有效但前者无效。
非常奇怪的是,H2 因此完全崩溃并且不会让其中包含 JOIN
的语句得到执行,而没有 JOIN
的简单查询工作正常。