fab*_*474 3 grails grails-orm database-schema grails-constraints
我的问题很简单,但我找不到任何GORM语法.
考虑以下课程:
class Article {
String text
static hasMany = [tags: String]
static constraints= {
tags(unique: true) //NOT WORKING
}
}
Run Code Online (Sandbox Code Playgroud)
我希望在我的约束中定义的每篇文章都有一个唯一的标记名称,但我不能使用上面的语法.显然,我需要在DB模式中使用以下内容:
create table article_tags (article_id bigint, tags_string varchar(255), unique (article_id , tags_string))
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
PS:我也坚持设置标签最小和最大尺寸的约束
仅供参考,您还可以在域类中使用自定义验证器:
static constraints = {
tags(validator: {
def valid = tags == tags.unique()
if (!valid) errors.rejectValue(
"tags", "i18n.message.code", "default message")
return valid
})
Run Code Online (Sandbox Code Playgroud)
在数据库级别,您可以通过在grails-app/conf/hibernate/hibernate.cfg.xml中包含以下代码来自定义DDL生成:
<hibernate-mapping>
<database-object>
<create>
ALTER TABLE article_tags
ADD CONSTRAINT article_tags_unique_constraint
UNIQUE(article_id, tags_string);
</create>
<drop>
ALTER TABLE article_tags
DROP CONSTRAINT article_tags_unique_constraint;
</drop>
</database-object>
</hibernate-mapping>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1371 次 |
| 最近记录: |