hibernate在数据库创建之后更新索引或约束

oxcyiej7  于 2021-07-11  发布在  Java
关注(0)|答案(2)|浏览(358)

我试图在列上添加一个唯一的约束,但如果我重新创建数据库,它就可以工作,但是当我更新已经存在的数据库时,它就不工作了。
类似于向索引添加unique。如果数据库已经存在,hibernate为什么不更新列呢?我正在使用dropwizard。

@Entity
@Table(name = EnrollmentStatusEntity.TABLE_NAME,
        indexes = {
            @Index(name = Student_RollNo,
                    columnList = rollNo,
                    unique = true)
        })
@Data
public class Student {
    public static final String TABLE_NAME = "Student";

    @Id
    @NonNull
    @Column(name = ID, unique = true, updatable = false, nullable = false)
    private String id;

    @NonNull
    @Column(name = COMPARTMENT_ID, unique=true, nullable = false, updatable = false)
    private String rollNo;
46scxncf

46scxncf1#

尝试将其添加到现有的hibernate类中 settings.put(Environment.HBM2DDL_AUTO, "update"); 它应该与此代码一起工作,但在将表添加到db时要小心如果表不为null,则不会更新db(第一次创建时必须为0,然后在代码内或通过浏览器更改值)

wyyhbhjk

wyyhbhjk2#

您可以通过dropwizard项目的配置yaml文件控制hibernate的自动架构生成:

database:
  properties:
    hibernate.hbm2ddl.auto: update

如果在配置文件中正确设置了db属性,则每次运行应用程序时都会自动更新架构。
这对于生产使用通常不是一个好主意。
dropwizard迁移使用liquibase跟踪、版本和部署数据库更改。我建议使用dropwizard迁移和设置 hibernate.hbm2ddl.auto: validate ,这样您就可以使用liquibase管理数据库模式更改,并使用hibernate验证数据库模式是否与java实体匹配。

相关问题