【问题标题】:Update UniqueConstrains on a JPA table更新 JPA 表上的 UniqueConstrains
【发布时间】: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


【解决方案1】:

由于您使用的是 Hibernate,因此有一个属性可以自动更新您的架构:hibernate.hbm2ddl.auto,其值为 update

https://docs.jboss.org/hibernate/orm/3.3/reference/en/html/session-configuration.html

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

【讨论】:

  • 有趣的是,我已将开发和生产的“hibernate.hbm2ddl.auto”设置为“更新”,但它仍然没有更新约束。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-17
  • 1970-01-01
  • 2018-09-23
  • 2011-12-24
  • 2020-05-12
  • 2012-01-16
  • 1970-01-01
相关资源
最近更新 更多