在我的应用程序中有一个实体:
@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/