我的问题很简单,但我找不到任何 GORM 语法。
考虑以下类:
class Article {
String text
static hasMany = [tags: String]
static constraints= {
tags(unique: true) //NOT WORKING
}
}
我想在我的约束中定义每篇文章一个唯一的标签名称,但我无法使用上述语法。 显然我需要在 DB 模式中类似:
create table article_tags (article_id bigint, tags_string varchar(255), unique (article_id , tags_string))
我该怎么做?
PS:我也被困在设置标签最小和最大尺寸的限制
最佳答案
仅供引用,您也可以使用 custom validator在域类中:
static constraints = {
tags(validator: {
def valid = tags == tags.unique()
if (!valid) errors.rejectValue(
"tags", "i18n.message.code", "default message")
return valid
})
在数据库级别,您可以customize DDL generation通过在 grails-app/conf/hibernate/hibernate.cfg.xml 中添加以下代码:
<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>
关于grails - 如何在数据库级别为一对多关联设置唯一性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4041939/