我今天感觉有点慢。我正在尝试做一些我认为非常简单的事情。我有一个Domain类,其中包含一个名为'name'的属性。我希望'name'有一个索引,我希望索引要求'name'是唯一的。我设置了唯一约束并尝试创建索引。关于如何将唯一属性添加到索引中,我无法理解Gorm文档。这是一些代码:
class Project {
String name
static hasMany = [things:Things]
static mapping = {
name index:'name_idx'
}
static constraints = {
name(unique:true)
}
}
上述情况一切顺利,除非在mysql中“显示项目中的索引”时,它显示我的名称键不唯一。我知道问题在于我没有在映射中指定唯一的,但坦率地说,gorm的文档让我头疼。我看到了关于列的所有类型的东西,但是我无法在网络上的任何地方找到显示我想要做的事情的单个示例。我不需要复杂的映射或复合键,我只想知道将唯一属性添加到上面的映射声明的语法。欢迎任何建议。
我还做了一个grails export-schema并看到以下内容:
create index name_idx on project (name);
表示此索引的任何内容都不需要唯一值
一个相关的后续问题是,一旦我成功地使该索引成为唯一的,当我去保存Project实例并且名称不唯一时,我应该期待什么类型的错误?是否抛出了特定的异常?我意识到,即使我检查给定的“名称”是唯一的,仍然有可能在我保存它时可能会有一行具有该名称。
我很确定做我想做的语法很简单,但我找不到一个简单的例子来教育自己。我去过this页面,但它没有解释如何强制执行唯一性。我想在名称索引级别强制执行它。
答案 0 :(得分:2)
indexColumn允许配置其他选项。这可能是你正在寻找的。 p>
static mapping = {
name indexColumn:[name:'name_idx', unique:true]
}
答案 1 :(得分:0)
如果只放置唯一约束,GORM会发送DDL以在数据库上创建唯一索引。
static constraints = {
name nullable: false, unique: true
}