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

找不到具有hibernate和hsqldb的表

  •  3
  • shipmaster  · 技术社区  · 15 年前

    我们正在使用HibernateEntityManager通过JPA映射我们的实体。我们正在使用hsqldb内存数据库进行单元测试。直到最近对模型的重构开始导致以下错误,一切都很好:

    17:55:48.516 [main] WARN  o.h.util.JDBCExceptionReporter - SQL Error: -22, SQLState: S0002
    17:55:48.517 [main] ERROR o.h.util.JDBCExceptionReporter - Table not found in statement
    

    我不能发布有问题的SQL,但是有人能给我关于上述错误可能原因的指针吗?尤其是因为我知道代码以前是有效的。似乎是因为重构,Hibernate正在生成无效的SQL?

    4 回复  |  直到 9 年前
        1
  •  2
  •   ChssPly76    15 年前

    嗯,桌子真的在那儿吗?为休眠启用SQL输出,并对照实际的数据库架构检查它。

    重构可能已失败(实体和表已重命名;未更新命名查询)。

    或者您可能在类路径的某个地方有一个较旧的类,导致读取错误的注释。

        2
  •  3
  •   Kees van Dieren    13 年前

    这也可能表明JDBC驱动程序和Hibernate方言之间不匹配。

    当JDBC驱动程序连接为hsqldb,Hibernate方言为org.hibernate.dialect.oracle10gdialect时,我们得到了这个结果。

    相应的异常消息: [错误]:无法获取数据库元数据 java.sql.sqlException:语句[select sequence_name from all_sequences]中找不到表

        3
  •  1
  •   Ayodeji Babaniyi    12 年前

    我也有这个问题,在我的情况下,我在实体中有类似的东西

    @column(name=“avail_target_percent”,columnDefinition=“number(5,2)”,nullable=false)

    只需避免列定义(去掉它!)你应该没事的。我做到了,问题解决了

        4
  •  1
  •   Hari    9 年前

    我们也有同样的例外。结果发现了它的财产 休眠.方言 设置为org.hibernate.dialect.oracle10gdialect,h2数据库用作数据源。解决方案是删除hibernate.dialect,不要使用任何值。Hibernate能够自动检测从数据源配置中检索到的基于方言的元数据。
    有关Hibernate自动检测方言的详细信息
    https://docs.jboss.org/hibernate/orm/3.6/reference/en-US/html/portability.html

    推荐文章