【问题标题】:HIbernate doesn't create table that already exist in another databaseHIbernate 不会创建另一个数据库中已经存在的表
【发布时间】:2019-06-26 18:09:43
【问题描述】:

我有一个名为com.test.Student 的bean 实体,它使用xml 映射到考勤数据库中名为“student”的表。考勤数据库中的“学生”表尚不存在。

即使属性hibernate.hbm2dll.auto 设置为“更新”,Hibernate 也不会在应用程序启动时在考勤数据库上创建“学生”表。它也不会产生任何异常、警告或查询。它根本不做任何事情。

经过一些测试,我意识到学生表已经存在于其他名为“sms”的数据库中。如果我将com.test.Student @Entity 映射到另一个表名(在任何数据库中都不存在),Hibernate 将使用此配置创建它。

为什么 Hibernate 不在映射数据库上创建“学生”表?另一个数据库中是否存在同名的另一个表以某种方式干扰?

一些信息:

  • 休眠版本:4.3.9
  • 春季版:4.3.9
  • MySQL 作为数据库
  • Java 8
  • Netbeans 作为IDE

【问题讨论】:

  • 设置 - spring.jpa.hibernate.ddl-auto 为“create-drop”
  • 你能发布休眠异常,还是它什么都不做?
  • 查找student表的大写版本,使用SHOW TABLES查询。
  • @Ajay_Kumar 如果我将 spring.jpa.hibernate.ddl-auto 设置为“create-drop”,那么一旦我关闭我不想要的应用程序,我的数据就会丢失
  • @GabrielPimenta 它没有显示任何异常,是的,它什么也不做

标签: java spring hibernate spring-data-jpa hibernate-mapping


【解决方案1】:

如 cmets 部分所述,如果 hibernate 由于 schema 之间的表名冲突而没有在 ddl auto 上创建表,则应显式声明:

@Table(name="attendance.student")

这样,hibernate 将正确地创建表。如果那里没有明确声明模式,它将公开查找具有相同名称的其他表,因此不会创建新表。

看看this bug description。如果您想了解更多有关 hibernate 在创建新表时的行为方式的详细信息,您肯定应该创建另一个具有更简洁场景的帖子,以便我们进一步讨论。

【讨论】:

  • 这适用于简单的表,但是当我在 xml 配置中向 join-subclass 添加相同的解决方案时,它不起作用。我还缺少其他配置吗?请提出建议,任何帮助将不胜感激。
猜你喜欢
  • 1970-01-01
  • 2013-12-04
  • 2020-03-18
  • 1970-01-01
  • 1970-01-01
  • 2013-05-14
  • 1970-01-01
  • 2014-06-28
相关资源
最近更新 更多