针对值组合设置唯一约束

Posted

技术标签:

【中文标题】针对值组合设置唯一约束【英文标题】:Set unique constraint against combination of values 【发布时间】:2014-11-18 18:13:05 【问题描述】:

我有两张桌子。一个包含国家列表(ISO 代码和全名),第二个包含 reg 的状态。 每个注册条目只能有一个国家,但每个国家可以有多个注册条目。 到目前为止非常简单。

regstat类设置如下:

class Regstat 
   static hasOne = [country: Country]
   String reg
   int status
   Date impdate
   static constraints = 
      reg(inList: ["FATCA", "ITC2014", "AEOI"])
   
   static mapping = 
      index: 'reg'
   

这是问题所在?我想添加一个约束,指出我只希望每个国家/地区有一个 reg 条目。例如,一个国家可以有 FATCA、IRC2014 或 AEOI,但每个国家只能有一个。 有什么建议我将如何创建这样的约束? 类似于

constrain = 
   reg+country(unique)

【问题讨论】:

这不是一个 grails 问题吗? 感谢 Opal 也纠正了语法:),这也是一个 grails 问题 Grails domain class: unique constraint for multiple columns的可能重复 【参考方案1】:

The unique constraint 可以采用另一个属性名称(或名称列表)作为唯一性的“范围”:

static constraints = 
  reg(inList: ["FATCA", "ITC2014", "AEOI"], unique:'country')

无论您将reg 设置为相对于country 唯一还是将country 设置为相对于reg 唯一,您都会得到相同的约束行为,区别在于这两个属性中的哪一个被视为“无效” " 当约束失败时 - reg unique:'country' 会将错误放在 reg 上,而 country unique:'reg' 会将错误放在 country 上。

【讨论】:

抱歉,花了一段时间,但试了一下,效果很好

以上是关于针对值组合设置唯一约束的主要内容,如果未能解决你的问题,请参考以下文章

如何为 Oracle 中的列组合赋予唯一约束?

postgresql字段值唯一约束

表的约束

具有定义值的唯一约束

主键约束是啥和啥组合?

两个外键的唯一约束始终是不同的组合