代码之家  ›  专栏  ›  技术社区  ›  NuCradle

不能在H2数据库中使用联接

  •  0
  • NuCradle  · 技术社区  · 6 年前

    当使用H2(1.3.168)作为本地数据库时,我在通过Java Hibernate执行某些查询时遇到了一个奇怪的问题。看起来Hibernate试图执行一系列SELECT语句,但是其中一个语句失败了,出现了一个模糊的错误。

    日志文件报告成功执行的几个SELECT语句只有一个参与表,例如SELECT。。。从T1到。。。;

    但是,当它在语句中得到一个简单的左外部连接语句时,会产生以下错误:

    General error: "java.lang.NoClassDefFoundError: org/h2/table/TableFilter$2" [50000-168]
    

    我接受了Hibernate报告的完全相同的查询,并试图在H2控制台中直接执行它。同样的错误。

    我用一个简单的连接替换了左外连接,同样的错误。我从连接中删除了第二个表,只从第一个表中进行选择,它选择得很好。第二张桌子也是这样,没有问题。

    SELECT * FROM T1;
    

    试过其他一些有连接的表。。。错误再次出现。

    SELECT * FROM T1 t1 JOIN T2 t2 ON t1.pk_id = t2.fk_id;
    

    有人知道氢气有什么问题吗?

    0 回复  |  直到 6 年前
        1
  •  0
  •   NuCradle    6 年前

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

    很奇怪,H2因为这个而完全崩溃,并且不允许 JOIN 在它们中执行,而不执行简单的查询 加入 好好工作。

    推荐文章