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

标签 java spring hibernate jpa

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

相关文章:

java - 如何迭代符合正则表达式的字符串

java - 如何设置:hidden value from another JSP element

java - 使用 Spring Security Adapter 时的 Keycloak session 超时行为

hibernate - 在哪里设置 Tomcat 项目的 webservices url?

java - 使 UTF-8 可用于使用 Spring 将阿拉伯语数据放入 Mysql DB

java - 如何使用 Apache Ignite/GridGain 在任何节点上重试失败的作业

java - 为什么我会得到 int.class cast 的 class cast exception

java - Spring-MVC : Failed to import bean definitions from relative location [servlet-context. xml]

java - 在intellij中获取资源文件夹的位置

java - 如何使用 hibernate 使用现有对象创建复合键对象