使用Hibernate和HSQLDB找不到表

时间:2009-09-18 00:57:13

标签: hibernate jpa hsqldb

我们正在使用hibernate entitymanager通过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因为重构而生成了无效的sqls?

5 个答案:

答案 0 :(得分:3)

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

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

相应的异常消息: [错误]:无法获取数据库元数据 java.sql.SQLException:在语句[select sequence_name from all_sequences]

中找不到表

答案 1 :(得分:2)

嗯,桌子到底有吗?为Hibernate启用SQL输出,并根据实际的数据库架构进行检查。

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

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

答案 2 :(得分:1)

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

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

避免使用columnDefinition(取出它!),你应该没问题。我做到了,问题得到解决

答案 3 :(得分:1)

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

答案 4 :(得分:1)

使用依赖项

groupId org.hsqldb    

代替

groupId hsqldb 

在您的pom.xml或gradle中。检出https://mvnrepository.com/search?q=hsqldb