3

我们使用休眠实体管理器通过 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

5 回答 5

3

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

当 JDBC 驱动程序连接是 HSQLDB 并且 Hibernate 方言是 org.hibernate.dialect.Oracle10gDialect 时,我们得到了这个。

相应的异常消息:[ERROR]: could not get database metadata java.sql.SQLException: Table not found in statement [select sequence_name from all_sequences]

于 2012-06-07T19:15:11.010 回答
2

那么,桌子真的在那里吗?为 Hibernate 启用 SQL 输出并根据实际的数据库模式检查它。

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

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

于 2009-09-18T02:00:48.573 回答
2

我们也遇到了同样的例外。事实证明,属性hibernate.dialect被设置为 org.hibernate.dialect.Oracle10gDialect,H2 数据库作为数据源。解决方案是删除 hibernate.dialect 并且不使用任何值。Hibernate 能够自动检测从数据源配置中检索到的基于方言的元数据
有关 hibernate 如何自动检测方言的更多信息
https://docs.jboss.org/hibernate/orm/3.6/reference/en-US/html/portability。 html

于 2016-04-07T18:30:35.703 回答
1

我也有这个问题,就我而言,我在实体中有类似的东西

@Column(name = "AVAIL_TARGET_PERCENT", columnDefinition = "number(5,2)", nullable = false)

只要避免 columnDefinition (把它拿出来!),你应该没问题。我这样做了,问题解决了

于 2013-02-06T18:45:51.780 回答
1

使用依赖

groupId org.hsqldb    

代替

groupId hsqldb 

在你的 pom.xml 或 gradle 中。查看https://mvnrepository.com/search?q=hsqldb

于 2020-06-01T14:43:11.427 回答