Grails / GORM Legacy DB: проблема "один ко многим" - PullRequest
2 голосов
/ 28 июня 2010

У меня есть устаревшая БД с довольно простой структурой. У меня есть "Rolls", которые содержат "RollTotals". Roll имеет первичный ключ "rollID", а RollTotals имеет составной ключ для "rollID" и "category".

Итак, в Grails у меня есть:

class Roll {
    Integer id
    ...
    static hasMany = [ rollTotals: RollTotal ]
    static mapping = {
        table('rolls')
        id(column:'rollID')
        version false
        ...
    }
}

и

class RollTotal implements Serializable {
    Integer rollId
    Integer category
    ...
    static belongsTo = [ Roll ]

    static mapping = {
        table('rolltotals')
        id composite:['rollId', 'category']
        version false
        rollId(column:'rollID')
        category(column:'category')
     ...
}

Эти сопоставления работают по отдельности, но когда я ставлю hasMany, он говорит:

Отсутствует таблица: rolls_rolltotals

Итак, я решил, что нужно знать, какой столбец использовать в качестве внешнего ключа, и добавил в Roll:

static mappedBy = [rollTotals: "rollId" ]

Там написано:

org.codehaus.groovy.grails.exceptions.GrailsDomainException: несуществующее свойство отображения [rollId], указанное для свойства [rollTotals] в классе [класс Roll]

Я пытался использовать rollID (как имя столбца), но получил тот же результат.

Есть идеи, как связать эти таблицы?

1 Ответ

4 голосов
/ 30 июня 2010

Попробуйте изменить принадлежность для RollTotal на:

static belongsTo = [roll: Roll]

и добавить в отображение для RollTotal

roll(column:'rollId')
...