2011-03-14 28 views
4

我想知道如果任何人有关于如何确保如果在连接表mm_author_books,如何确保列(mm_book_idmm_author_id)是唯一的想法? 例如,我不希望该表包含book_idauthor_id(如1,1和1,1)的重复记录。那么,如何做到这一点...如何确保在多列上应用唯一约束(mm_book_id和mm_author_id)?

class Book { 
    String title 
    static belongsTo = Author 
    static hasMany = [authors:Author] 
    static mapping = { 
     authors joinTable:[name:"mm_author_books", key:'mm_book_id' ] 
    } 
} 

class Author { 
    String name 
    static hasMany = [books:Book] 
    static mapping = { 
     books joinTable:[name:"mm_author_books", key:'mm_author_id'] 
    } 
} 

我在 “mm_author_books” 域名尝试这样做:

class mm_author_books { 

String book_agency_name  
static constraints = { 
    book_agency_name(unique:['mm_author_id','mm_book_id']) 
    } 
static belongsTo = [authors:Author, books:Book] 

} 

但得到以下错误:

Caused by: org.codehaus.groovy.grails.validation.exceptions.ConstraintException: Exception thrown applying constraint [unique] to class [class content_hub_admin.mm_author_books] for value [[mm_author_id, mm_book_id]]: Scope for constraint [unique] of property [name] of class [class content_hub_admin.mm_author_books] must be a valid property name of same class at content_hub_admin.mm_author_books$_clinit_closure1.doCall(mm_author_books.groovy:6) at content_hub_admin.mm_author_books$_clinit_closure1.doCall(mm_author_books.groovy) ... 28 more

感谢&问候

rsheyeah

回答

4

类mm_author_books(更好的名称是AuthorBookRelationship)没有属性mm_author_id和mm_book_id。试试这个:

class AuthorBookRelationship { 

    String bookAgencyName 

    static constraints = { 
     bookAgencyName(unique:['author','book']) 
    } 

    static belongsTo = [author:Author, book:Book] //only one author and one book 

    } 
} 
+0

瞧!它的工作 – 2011-03-14 14:28:02

+0

有没有办法做到这一点,而不创建一个多对多的类? – Luccas 2011-03-14 15:21:45

+0

@Luccas默认情况下,jointable不支持独特的东西。但是,也许你可以将许多属性声明为Set。 – Medrod 2011-03-14 18:34:33