Grails Domain - 复合唯一索引

通常都有这样的业务,父对象唯一,子对象在其父对象的范围内唯一。如,同一个公司内的员工名称必须是唯一的(这里假设即使重名,也用编号区分),但不同公司的员工可以重名。
 
Grails很轻松就能实现复合唯一索引的例子
    name(blank: false, unique: 'company')

相应的,在数据库会出现如下定义
    UNIQUE KEY `company_id` (`company_id`,`name`),



之前,我没查到这个功能,还用了很笨的自定义验证去实现。。。
name(blank: false, validator: { val, obj ->
  //for one company, employee cannot have same name
  //IdNotEqual for update case
  //todo 有没有复合唯一索引呀。。。
def e = Employee.findByNameAndCompanyAndIdNotEqual(val, obj.company, obj.id)
if (e) {
   return false
   } else {
   return true
   }
})

你可能感兴趣的:(unique,grails)