我有一个名为com.test.Student
的bean实体,该实体使用xml映射到考勤数据库中一个名为“ student”的表。考勤数据库中的“学生”表尚不存在。
即使属性hibernate.hbm2dll.auto
设置为“ update”,Hibernate也不会在应用程序启动时在出勤数据库上创建“ student”表。它还不会生成任何异常,警告或查询。它根本什么也没做。
经过一些测试,我发现一个学生表已经存在于其他名为“ sms”的数据库中。如果我将com.test.Student
@Entity映射到另一个表名(在任何数据库中都不存在),则Hibernate将使用此配置创建它。
为什么Hibernate不在映射的数据库上创建“ student”表?另一个数据库中存在相同名称的另一个表是否以某种方式干扰了?
一些信息:
答案 0 :(得分:0)
如评论部分所述,如果由于架构之间的表名冲突而使hibernate没有在ddl auto上创建表,则应明确声明:
@Table(name="attendance.student")
这样,休眠将正确地创建表。如果没有在其中显式声明任何模式,它将公开查找其他具有相同名称的表,因此不会创建新表。
看看this bug description。如果您想了解有关创建新表时休眠方式的更多详细信息,则应使用更简洁的方法来确定创建另一篇文章,以便我们进一步讨论。