Как обеспечить применение уникального ограничения к нескольким столбцам (mm_book_id и mm_author_id)? - PullRequest
4 голосов
/ 14 марта 2011

Я хотел бы знать, есть ли у кого-нибудь идеи о том, как обеспечить, чтобы в объединяющей таблице mm_author_books как убедиться, что столбцы (mm_book_id и mm_author_id) уникальны?Например, я не хочу, чтобы таблица содержала повторяющиеся записи book_id и author_id, такие как 1,1 и 1,1.Итак, как это сделать ...

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]

}

, но получаю следующую ошибку:

Вызывается: org.codehaus.groovy.grails.validation.exceptions.ConstraintException: исключение, вызванное применением ограничения [unique] к классу [class content_hub_admin.mm_author_books] для значения [[mm_author_id, mm_book_id]]: область действия для ограничения [unique] ofсвойство [имя] класса [class content_hub_admin.mm_author_books] должно быть допустимым именем свойства того же класса в content_hub_admin.mm_author_books $ _ clinit _closure1.doCall (mm_author_books.groovy: 6) в content_hub_admin.mm_aut_ clinit _closure1.doCall (mm_author_books.groovy) ... еще 28

Спасибо и всего наилучшего

rsheyeah

1 Ответ

4 голосов
/ 14 марта 2011

класс 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

    }
}
...