使用 Hibernate 和 HSQLDB 找不到表
题
我们使用 hibernate 实体管理器通过 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?
解决方案
那么,桌子真的在那里吗?为 Hibernate 启用 SQL 输出并根据实际数据库架构检查它。
您的重构可能被搞砸了(实体和表被重命名;命名查询未更新)。
或者您可能在类路径中的某个位置有较旧的类,导致读取错误的注释。
其他提示
这也可能表示JDBC驱动器和休眠方言之间的失配。
我们得到了这个时候JDBC驱动程序连接是HSQLDB和Hibernate的方言是org.hibernate.dialect.Oracle10gDialect。
在相应的异常信息: [错误]:无法获取数据库的元数据 值java.sql.SQLException:在语句[选择从all_sequences SEQUENCE_NAME]未发现表
我有这个问题也是如此,在我来说,我有这样的事情在实体
@Column(名称= “AVAIL_TARGET_PERCENT”,columnDefinition = “号(5,2)”,可为空=假)
就避免columnDefinition(带它出去!),你应该罚款。我这样做,并且问题是固定
我们也得到同样的异常。原来,属性的 hibernate.dialect 设定为org.hibernate.dialect.Oracle10gDialect用H 2数据的基础上作为数据源。解决的方法是删除hibernate.dialect和不使用任何价值。冬眠有能力自动检测基于方言元数据从数据源配置检索到的结果,对于关于如何冬眠的更多信息自动检测方言的结果, https://docs.jboss.org/hibernate /orm/3.6/reference/en-US/html/portability.html