java - Hibernate 5 忽略@Table 模式参数

标签 java mysql spring hibernate jpa

在我的应用程序中有一个实体:

@Entity
@Table(schema = "hr", name = "personal_data")
public class PersonalData {
}

和在 Spring 的 application.properties 中定义的连接字符串:

spring.datasource.url=jdbc:mysql://localhost/mobile?UseUnicode=true&characterEncoding=utf8

如果我调用以下代码:

TypedQuery<E> typedQuery = em.createQuery("from PersonalData pd where pd.employeeId = ?1", PersonalData.class);
typedQuery.setParameter(1, 123);
return typedQuery.getSingleResult();

它会产生这个 SQL:

select * from personal_data personalda0_ where personalda0_.employee_id=?

将失败并出现异常

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'mobile.personal_data' doesn't exist

因为 personal_data 表是在 hr 数据库中定义的,而 mobile 中没有这样的表。

这在 Hibernate 4.3.13 中运行良好(即 SQL 中的表名以数据库名称为前缀),并在应用程序迁移到使用 Hibernate 5.2.14 的 Spring Boot 2.0 时停止。有什么方法可以实现 Hibernate 5.x 中的旧行为?

最佳答案

我可以说Hibernate 5和MySQL之间存在误解,这里说来话长Hibernate 5.0.6 Ignores schema in MySQL

建议的一个解决方案是使用架构名称代替目录,而不是:

@Table(schema = "hr", name = "personal_data")
       ^^^^^^

你可以使用:

@Table(catalog = "hr", name = "personal_data")
       ^^^^^^^

也看看这个:

关于java - Hibernate 5 忽略@Table 模式参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49552556/

相关文章:

java - 如何告诉spring使用log4j2打印日志消息?

java - 在库中使用依赖注入(inject)

php - Insert into MySQL db 在循环中发生两次

mysql - 运行 ALTER 添加新列时 tmp 表不增长

php从表1中选择项目查询,复制到表2

java - 未找到 Spring Web 服务类异常

spring - 如何在Spring MVC中绑定(bind)2个GET方法并使用@RequestMapping进行区分?

java - 使用 JSP 中的 RequestDispatcher 包含静态内容在 GAE Java SDK 上不起作用

java - Spring安全权限

java - 如何在一个 TextView 中保留两个字符串的两种不同字体大小