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

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

select max(id) from users.user

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

最佳答案

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

关于java - 为什么 Hibernate 生成这个 SQL 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17380399/

相关文章:

hibernate - 在应用程序级别为所有实体定义 dynamicUpdate 属性?

java - Wildfly 和 MySQL 的不可重复读隔离级别

java - 接缝吞没 JDBC 异常

java - getClass().getClassLoader().getResource(path) 始终返回 null,即使路径正确

java - servlets-default.jar 有什么作用?

mysql - Rails/Sqlite 3 - 在页面上显示表格数据

java - JPA、EclipseLink。上传 Blob 字段时获取进度吗?

mysql - 多个多对多关系(循环关系)

mysql - 从 2 个 MySQL 数据库查询数据到新的 MySQL 数据库

java - 如何解决 N+1 选择问题?