我试图在列上添加一个唯一的约束,但如果我重新创建数据库,它就可以工作,但是当我更新已经存在的数据库时,它就不工作了。
类似于向索引添加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;
2条答案
按热度按时间46scxncf1#
尝试将其添加到现有的hibernate类中
settings.put(Environment.HBM2DDL_AUTO, "update");
它应该与此代码一起工作,但在将表添加到db时要小心如果表不为null,则不会更新db(第一次创建时必须为0,然后在代码内或通过浏览器更改值)wyyhbhjk2#
您可以通过dropwizard项目的配置yaml文件控制hibernate的自动架构生成:
如果在配置文件中正确设置了db属性,则每次运行应用程序时都会自动更新架构。
这对于生产使用通常不是一个好主意。
dropwizard迁移使用liquibase跟踪、版本和部署数据库更改。我建议使用dropwizard迁移和设置
hibernate.hbm2ddl.auto: validate
,这样您就可以使用liquibase管理数据库模式更改,并使用hibernate验证数据库模式是否与java实体匹配。