Hibernate 5忽略@Table架构参数

时间:2018-03-29 09:32:49

标签: 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中实现旧的行为?

1 个答案:

答案 0 :(得分:5)

我可以说Hibernate 5和MySQL之间存在误解,这是一个很长的故事Hibernate 5.0.6 Ignores schema in MySQL

建议使用一种解决方案,即在目录的位置使用模式名称,而不是:

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

您可以使用:

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

另请看一下: