Java 更新JPA表上的UniqueConstraints

Java 更新JPA表上的UniqueConstraints,java,mysql,hibernate,jpa,jpa-2.0,Java,Mysql,Hibernate,Jpa,Jpa 2.0,我有一个定义如下的表格: @Entity @Table( uniqueConstraints = {@UniqueConstraint(columnNames = {"reward_id", "transaction_id"})} ) public class ShipmentItem extends Model { ... } 我想更改唯一约束以使其更轻松: @Entity @Table( uniqueConstraints = {@UniqueCon

我有一个定义如下的表格:

@Entity
@Table(
        uniqueConstraints = {@UniqueConstraint(columnNames = {"reward_id", "transaction_id"})}
)
public class ShipmentItem extends Model {
    ...
}
我想更改唯一约束以使其更轻松:

@Entity
@Table(
        uniqueConstraints = {@UniqueConstraint(columnNames = {"reward_id", "transaction_id", "sku"})}
)
public class ShipmentItem extends Model {
    ...
}
更新后的代码可以编译,但JPA不会更改表模式。是否有需要使用的配置设置

如果JPA不能做到这一点,那么解决这个问题的系统方法是什么?我可以编写迁移,但是,JPA会自动为约束生成名称,因此不清楚如何删除旧约束


不确定这是否重要,但我使用的是hibernate和mysql。

因为您使用的是hibernate,所以有一个属性可以自动更新您的模式:hibernate.hbm2ddl.auto值为update


(但请注意,不建议在生产环境中使用它)

因为您使用的是Hibernate,所以有一个自动更新模式的属性:Hibernate.hbm2ddl.auto值为update


(但请注意,不建议在生产中使用它)

您不能依赖JPA为您创建表格并使用类似于您将自己进行所有更改的解决方案。我同意Blazej。此外,如果您使用的是PostgreSQL之类的数据库,您可以创建可延迟的约束,该约束将允许您更新约束,但DB在事务结束前不会执行引用检查。您不能依赖JPA为您创建表,而使用类似于您将在何处进行所有更改的解决方案你自己,我同意Blazej。此外,如果您使用的是PostgreSQL之类的数据库,则可以创建约束可延迟项,该约束可解决允许您更新约束的问题,但DB在事务结束之前不会执行引用检查。有趣的是,对于开发和生产,我将“hibernate.hbm2ddl.auto”设置为“update”,但它仍然没有更新约束。有趣的是,对于开发和生产,我将“hibernate.hbm2ddl.auto”设置为“update”,但它仍然没有更新约束。