为什么Hibernate会生成这个SQL查询?

时间:2013-06-29 12:52:51

标签: java mysql hibernate

我正在使用Hibernate和MySql服务器。我使用多个数据库作为“名称空间”(例如userstransactionslogging等。)

因此,我将Hibernate配置为不连接到特定数据库:

url = jdbc:mysql://127.0.0.1/

表所在的数据库通过catalog属性在hbm文件中定义:

<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会生成这个无效的查询?有人遇到过这个问题吗?

1 个答案:

答案 0 :(得分:1)

您需要指定生成器的架构。有关更详细的答案,请参阅this question on SO