2013-06-29 101 views
5

我正在使用Hibernate和MySql服務器。我使用多個數據庫作爲「命名空間」(例如userstransactionslogging等)。爲什麼Hibernate生成這個SQL查詢?

所以,我configued Hibernate來無法連接到特定的數據庫:

url = jdbc:mysql://127.0.0.1/

其中表位於HBM文件中定義通過catalog屬性的數據庫:

<class name="com.myApp.entities.User" table="user" schema="" catalog="users"> ... 

當我想加載一些數據時,一切正常,Hibernate似乎生成了預期的SQL查詢(通過在表名中使用目錄前綴),例如:

select id from users.user 

然而,當我嘗試添加一個新的記錄時,Hibernate不使用from [catalog].[table_name]語法了。所以我得到一個MySQL錯誤'沒有選擇數據庫'。

select max(id) from user 

Hibernate是爲了嘗試讓未來的ID來創建一個新的記錄,但它沒有指定在數據庫所在的表,它應該是:

select max(id) from users.user 

爲什麼Hibernate的生成這個無效的查詢?有人遇到過這個問題嗎?

+0

你使用的是什麼版本的hibernate? –

+0

我正在使用Hibernate-4.2.2 –

+0

如果您使用:schema =「users」catalog =「users」,會發生什麼情況? – Rafa

回答

1

您需要指定生成器的模式。有關更詳細的答案,請參閱this question on SO