2011-04-03 75 views
1

今天我感觉有点慢。我正在尝试做一些我认为非常简单的事情。我有一个名为'name'的属性的Domain类。我想'名称'有一个索引,我希望索引要求'名称'是唯一的。我已经设置了独特的约束,并尝试创建索引。我无法从Gorm docs中理解如何将唯一属性添加到索引。下面是一些代码:GORM映射:使索引独特

class Project { 
    String name 

    static hasMany = [things:Things] 

    static mapping = { 
     name index:'name_idx' 
    } 
    static constraints = { 
     name(unique:true) 
    } 
} 

一切都很好,与上述情况,在MySQL“从项目展示指标”做的时候,除了它显示我的名字键不是唯一的。我知道问题在于我没有在映射中指定唯一的,但坦率地说,gorm的文档让我头疼。我看到有关列的各种信息,但我无法在Web上的任何位置找到一个示例来显示我想要执行的操作。我不需要复杂的映射或复合键,我只想知道将上述唯一属性添加到映射声明的语法。欢迎任何建议。

我还做了一个Grails的出口模式,并看到以下内容:在

create index name_idx on project (name); 

任何证据表明该指数需要唯一值

一个相关的后续问题是,一旦我做的是成功索引是唯一的,当我去保存一个Project实例并且该名称不是唯一的时,我应该期待什么类型的错误?是否抛出了特定的异常?我意识到,即使我检查给定的“名称”是唯一的,仍然有可能在我保存时可能会出现一个具有该名称的行。

我很确定我想要的语法很简单,但我找不到一个简单的例子来教育自己。我去过this页面,但没有解释如何执行唯一性。我想在名称索引级别强制执行它。

回答

2

indexColumn允许配置其他选项。这可能是你正在寻找的东西。

static mapping = { 
    name indexColumn:[name:'name_idx', unique:true] 
} 

Grails Documentation for indexColumn

+0

谢谢德里克。这看起来确实是对的。我想我的挂断是我不明白为什么我不能用简单的语法做到这一点,但在一天结束时,这并没有太大的不同!我投这个为“正确”的答案。再次感谢。 – 2011-04-04 11:28:20

+0

很高兴它为你的富有工作。既然这是你自己的问题,你应该接受答案,而不是投票。 :) – 2011-04-05 04:21:31