我有一个使用Hibernate的Java Spring MVC应用程序和一个MySQL 5.7 DB。 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;
}
此实体的定义与其他实体完全相同,但是在应用程序启动时,不会在数据库中创建此特定表。鉴于我已经发现了,因此没有错误消息。
答案 0 :(得分:0)
我实际上是通过回答另一个问题:hibernate not creating table but no error messages
来发现问题的当使用保留的db关键字作为属性/列名称时,会发生这种情况。就我而言,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;
}
更改属性名称(或指定一个显式的列名称)可以解决此问题。如果我启用了正确的调试标志,可能会出现一条错误消息,但是在此之前问题已得到解决。