2013-06-29 100 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