多列的唯一约束

Posted

技术标签:

【中文标题】多列的唯一约束【英文标题】:Unique Constraint Over Multiple Columns 【发布时间】:2012-08-10 23:02:43 【问题描述】:

我正在使用 SEAM 2/Hibernate 和 PostgreSQL 9 数据库。我有下表

Active Band
===========
active_band_id serial
active_band_user text
active_band_date timestamp
active_band_process integer

我想添加一个约束,确保每个新条目都有唯一的 active_band_user 和 active_band_date 组合。

每秒可能有很多尝试插入,所以我需要尽可能高效,是否有可以在实体映射中使用的 SEAM / hibernate 注释?

提前致谢

【问题讨论】:

这似乎重复了***.com/questions/3211972/… 【参考方案1】:

没有在插入/更新之前检查唯一性的 Hibernate 注释。但是如果使用自动数据库创建,会有注释会对数据库产生这样的约束:

 @Table(
    name="ACTIVE_BAND", 
    uniqueConstraints=
        @UniqueConstraint(columnNames="active_band_user", "active_band_date")
)

【讨论】:

我不认为它支持这一点,因为我在 Eclipse 中得到“注释属性 Table.uniqueConstraints 的值必须是一些 @javax.persistence.UniqueConstraint 注释”。此方法是否在 SQL 模式中生成约束? 是的,它确实支持。它记录在这里:docs.oracle.com/javaee/6/api/javax/persistence/… 肯定有其他问题。是否导入了 javax.persistence.UniqueConstraint? 我知道这是几年前的事了,但请确保您使用的是 javax.persistence.Table 而不是 org.hibernate.annotations.Table。 Hibernate 的@Table 没有uniqueConstraints 字段。【参考方案2】:

在更现代的语法中,它是:

@Table(
    name="ACTIVE_BAND", 
    uniqueConstraints =
        [UniqueConstraint(
                columnNames = ["active_band_user", "active_band_date"]
        )]
)

【讨论】:

以上是关于多列的唯一约束的主要内容,如果未能解决你的问题,请参考以下文章

mysql中多列的唯一约束[重复]

实体框架中多列的唯一键约束

PostgreSQL:基于多列唯一约束的自增

在多列上创建复合唯一约束

将房间数据库中的唯一约束添加到多列

建表的约束