2009-09-18 77 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