Hibernate自动更新不会为特定实体创建表

时间:2020-01-08 22:34:24

标签: java spring hibernate jpa

我有一个使用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;
}

此实体的定义与其他实体完全相同,但是在应用程序启动时,不会在数据库中创建此特定表。鉴于我已经发现了,因此没有错误消息。

1 个答案:

答案 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;
}

更改属性名称(或指定一个显式的列名称)可以解决此问题。如果我启用了正确的调试标志,可能会出现一条错误消息,但是在此之前问题已得到解决。