【发布时间】:2016-07-29 12:41:49
【问题描述】:
我有一个表定义如下:
@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。
【问题讨论】:
-
您不能依赖 JPA 为您创建表并使用像 flyway 这样的解决方案,您将自己进行所有更改。
-
我同意 Blazej。此外,如果您使用的是 PostgreSQL 之类的数据库,您可以创建约束 DEFERRABLE,这将解决允许您更新约束,但数据库在事务结束之前不会执行引用检查。
标签: java mysql hibernate jpa jpa-2.0