【问题标题】:Why is Hibernate generating this SQL query?为什么 Hibernate 会生成这个 SQL 查询?
【发布时间】:2013-07-01 21:32:06
【问题描述】:

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

所以,我将 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 正在尝试获取 future id 以创建新记录,但它没有指定表位于哪个数据库中,它应该是:

select max(id) from users.user

为什么 Hibernate 会生成这个无效查询?有人遇到过这个问题吗?

【问题讨论】:

  • 你使用的休眠版本是什么?
  • 我使用的是 Hibernate-4.2.2
  • 如果你使用:schema="users" catalog="users" 会发生什么?
  • 您是否将属性 hibernate.dialect 设置为 org.hibernate.dialect.MySQLDialect?也许休眠无法自动确定这一点......

标签: java mysql hibernate


【解决方案1】:

您需要为生成器指定架构。请参阅this question on SO 以获得更详细的答案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-17
    • 2021-03-17
    • 1970-01-01
    • 2014-03-12
    • 1970-01-01
    • 2021-08-13
    • 1970-01-01
    • 2011-03-11
    相关资源
    最近更新 更多