Отношения Grails со статическими отображаемыми таблицами - PullRequest
1 голос
/ 22 сентября 2010

Насколько я могу судить, я не могу установить отношения, чтобы работать на отображенных таблицах с Grails. У меня есть два домена, к которым я пытаюсь присоединиться: Ресурсы и Кассеты. Ресурс может иметь много кассет.

Если я запускаю приведенный ниже код с использованием скаффолдинга, я получаю сообщение об ошибке «Неизвестный столбец 'this_.cassette_id' в« списке полей »». Если я пытаюсь определить cassette_id в отображении, я получаю фатальную ошибку при компиляции.

Может ли какой-нибудь мудрый волшебник Грааля поставить меня на правильный путь, я новичок в этом и перепробовал практически все методы, которые смог найти, чтобы сделать это действительным.

//resource definition

package edu.place.project

class Resource {
    String title
    String number
    String type
    Cassette cassette

    static hasMany  = [cassette : Cassette ]

    static mappedBy = [cassette : "hvt"]

    static mapping = {
            table "Resources"
    version false
            columns {
                    id column : "resourceIdentifier2"
                    title column: "title"
                    number column: "extentNumber"
                    type column: "extentType"
            }  
    }

    static constraints = {
    }
}

//Cassette definition

package edu.place.project

class Cassette {
    String id
    String type
    String numCode
    String hvt

    static belongsTo = Resource

    static mapping = {
            table "ArchDescriptionInstances"
            version false
            columns {
                    id column : "barcode", type : String
                    type column : "userDefinedString2"
                    numCode column : "container1AlphaNumIndicator"
                    hvt column : "userDefinedString1"
            }
    }

     static constraints = {
            barcode(unique : true)
     }
}

1 Ответ

2 голосов
/ 22 сентября 2010

Это, вероятно, потому что у вас есть:

class Resource {
    Cassette cassette
    static hasMany = [cassette: Cassette]
}

Эти два определения противоречат друг другу.hasMany неявно пытается создать Set (коллекцию) с именем cassette в вашем домене, но вы явно определили его как Cassette.

Попробуйте удалить Cassette cassette и посмотритечто просходит.Я не думаю, что вам это нужно для модели, которую вы описали.

Кроме того, вы можете также рассмотреть вопрос о переименовании поля в cassettes, поскольку это коллекция, а не отдельный объект.

После этого ваши домены (в любом случае части отношений) могут выглядеть следующим образом:

class Resource {
    static hasMany = [cassettes: Cassette]
}

class Cassette {
    Resource resource
    static belongsTo = Resource
}
...