2009-09-18 90 views
3

我们使用hibernate entitymanager通过JPA映射我们的实体。我们正在使用HSQLDB内存数据库进行单元测试。一切都很好,直到最近重构的模式开始引起以下错误:没有发现休眠和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?

回答

2

那么,表格实际上在那里?为Hibernate启用SQL输出并根据实际的数据库模式进行检查。

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

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

+3

原来的实体被命名为保留字,从而导致表创建失败。 – shipmaster 2009-09-29 22:42:07

+0

保留字 - 我有同样的问题! – 2010-09-26 20:44:34

3

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

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

相应的异常消息: [错误]:无法获取数据库的元数据 值java.sql.SQLException:表在声明中没有找到[从all_sequences选择SEQUENCE_NAME]

+0

你是如何解决它的? – dvtoever 2014-12-09 12:53:41

+0

Hibernate需要设置一个SQL方言。它需要与jdbc uri中配置的数据库供应商相匹配。 如何配置Hibernate会话工厂以使用某种SQL方言的示例可以在此处找到:http://docs.jboss.org/hibernate/orm/4.3/manual/en-US/html/ch01.html#教程firstapp构 – 2014-12-10 13:18:08

1

我也有这个问题,在我的情况我有这样的事情在实体

@Column(name = “AVAIL_TARGET_PERCENT”,columnDefinition = “号(5,2)”,可为空= FALSE)

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

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