在我的申请中有一个实体:
@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中实现旧的行为?
答案 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")
^^^^^^^
另请看一下: