我有一个使用 Hibernate 和 MySQL 5.7 DB 的 Java Spring MVC 应用程序。 Hibernate 配置为通过以下方式自动更新新实体的架构:<prop key="hibernate.hbm2ddl.auto">update</prop>
它适用于我的应用程序中的所有实体,除了一个:
@Entity
@IdClass(QuestionId.class)
@Getter
@Setter
@Accessors(chain = true)
@EqualsAndHashCode
public class Question {
@Id
private String key;
@Id
private Long version;
@Type(type = "json")
@Column(columnDefinition = "json")
private JsonNode metaData;
}
此实体的定义方式与其他实体完全相同,但当应用程序启动时,不会在数据库中创建此特定表。据我所知,没有任何错误消息。
最佳答案
实际上,我在另一个问题的答案的帮助下发现了这个问题:hibernate not creating table but no error messages
使用保留数据库关键字作为属性/列名称时,可能会发生此行为。就我而言,key
是 MySQL 中的保留关键字: https://dev.mysql.com/doc/refman/8.0/en/keywords.html
public class Question {
@Id
private String key; // <==== NO; `KEY` is a db reserved keyword.
@Id
private Long version;
@Type(type = "json")
@Column(columnDefinition = "json")
private JsonNode metaData;
}
更改属性名称(或者指定显式列名称)可以解决该问题。如果我启用了正确的调试标志,可能会出现错误消息,但问题在此之前已解决。
关于java - Hibernate自动更新不会为特定实体创建表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59654745/