2011-12-27 3 views
0

Я создаю (теоретически) простые hasMany отношения в классе домена. У меня есть две таблицы с отношением внешнего ключа между ними. В таблице 1 в объект домена следующим образом:Grails hasMany error create beans

Functionality{ 
String id 
static hasMany = [functionalityControllers:FunctionalityController] 
static mapping = 
{ 
    table 'schema.functionality' 
    id column:'FUNCTIONALITY_NAME', type:'string', generator:'assigned' 
    version false 
} 
} 

и объект домена 2

FunctionalityController 
{ 
    String id 
    String functionalityName 
    String controllerName 

    static mapping = 
    { 
    table 'schema.functionality_controller' 
    id column:'id', type:'string', generator:'assigned' 
    version:false 
    } 
} 

Проблема, которую я имею, что когда у меня есть hasMany линии внутри объекта домена Functionality, приложение выиграл» t (как приложение, так и интеграционные тесты). Ошибка org.springframework.beans.factory.BeanCreationException, ведущая к Invocation of init method failed; nested exception is java.lang.NullPointerException.

Любая помощь будет оценена по достоинству. UPDATE: * Рабочие домены *:

class Functionality { 

String id 
static hasMany = [functionalityConts:FunctionalityCont] 
static mapping = 
{ 
    table 'schema.functionality' 
    id column:'FUNCTIONALITY_NAME', type: 'string', generator: 'assigned' 
    functionalityConts(column:'functionality_name') 
    version false; 
} 
} 

и

class FunctionalityCont { 

String id 
String functionalityName 
String controllerName 
static belongsTo = [functionality: Functionality] 
static contraints = { 

} 
static mapping = 
{ 
    table 'schema.functionality_controller' 
    id column:'id', type: 'string', generator: 'assigned' 
    functionality(column:'FUNCTIONALITY_NAME') 
    version false; 
} 
} 

ответ

3

Ну 2 вещи ...

1.I'm не уверен, но я думаю, что ваш класс домен с префиксом «Controller», может быть, является ответственным, это потому, что Grails является Конвенция по конфигурации и по соглашению класс контроллера заканчивается префиксом контроллера и находится в папке с контроллером, в этом случае является «запутанным»

2. В GORM и в этом случае отношения между объектами могут быть однонаправленными или двунаправленными, это ваше решение выбрать один , но в обоих случаях существуют разные реализации, класс Functionality (btw отсутствует слово «class») имеет правильное отношение к FunctionalityController через hasMany, но Functionali tyController не знает об отношениях, так что вы можете реализовать:

// For unidirectional 
static belongsTo = Functionality 
// For bidirectional 
static belongsTo = [functionality:Functionality] 
// Or put an instance of Functionality in your domain class, 
// not common, and you manage the relationship 
Functionality functionality 

Так проверить его и скажите нам, пожалуйста ... С уважением

+0

Перед этим ответом я изменил FunctionalityController быть FunctionalityCont без изменений , Также я пробовал вышеуказанные шаги, и я получаю другую ошибку, которую я опубликую в ответ Грегга. – Joseph

+0

Не на 100% уверен, что это правильный ответ, поскольку я думал, что вчера попробовал то же самое, не повезло. Кажется, что он работает как ожидается, хотя, как с, так и без него. – Joseph

+0

Последняя проблема, с которой я столкнулся: SQL, который создается, ссылается на несуществующий столбец. Как указать столбец/поле, которое будет использоваться? – Joseph

3

Попробуйте добавить

статические belongsTo = [функциональность: Функциональность]

к классу FunctionalityController , Я подозреваю, что ваша ошибка больше, чем то, что вы показали, но, как правило, hasMany нуждается в собственной стороне. Так как именно там действительно живет внешний ключ.

Смежные вопросы