一般动作
登录
Wiki: BROPEN ▼: Document Index
»
Space: FAQ ▼: Document Index
»
Page: Domain中如何校验多个字段的唯一性
搜索
zh
页面动作
导出 ▼: 以PDF格式导出 以RTF格式导出 以HTML格式导出
更多动作 ▼: 打印预览 察看源码
欢迎进入Wiki » FAQ » Domain中如何校验多个字段的唯一性?

# Domain中如何校验多个字段的唯一性?

在2014-06-11 15:35上被李小翔修改
评论 (0) · 附件 (0) · 记录 · 信息

Grails提供了 constraints 的 DSL 来进行数据定义与校验，可以通过 unique 关键字来设置字段唯一性校验，此时会自动生成唯一性的索引，如：

class Foobar {
String name
String code
String unit
static constraints = {
name(nullable:false, blank:false, unique:['code','unit'])
}
}

上面的Domain中，会同时对 name、code、unit 三个字段进行唯一性校验（类似联合主键），并生成数据库索引。

但是在Grails中，如果是 update，则会自动校验并设置 bean.errors，可是如果是 insert，则不会执行校验而是直接抛出数据库异常。

在Grails修复该问题前，可以配置自定义校验器validator、并调用BroToolkit的API进行多字段的唯一性校验：

name(nullable:false, blank:false, unique:['code','unit'],
validator: bropen.toolkit.utils.grails.BeanUtils.getGroupUniqueValidator('name'))

此外，如果是继承的 Domain 类，无法在子类中的 constraints 中设置 unique 并生成唯一索引，此时仍然可以通过 validator 来实现多字段唯一性校验，如：

// 将 uniqie 的字段名，作为 getGroupUniqueValidator 的第二个参数。
name(nullable:false, blank:false,
validator: bropen.toolkit.utils.grails.BeanUtils.getGroupUniqueValidator('name', ['code','unit']))
标签： BroToolkit grails
在2014-05-26 16:15上被李小翔创建

- 评论 （0）
- 附件 （0）
- 记录
- 信息

# 快速链接

- 首页
- 新闻动态
- FAQ

Copyright © 2013 北京博瑞开源软件有限公司
京ICP备12048974号