Grails hasMany ошибка создания бинов - PullRequest
0 голосов
/ 27 декабря 2011

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

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, приложение не запускается (и приложение, и интеграционные тесты). Ошибка 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;
}
}

Ответы [ 2 ]

3 голосов
/ 28 декабря 2011

Ну, 2 вещи ...

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

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

// 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

Итак, проверьте это и сообщите нам, пожалуйста ... С уважением

3 голосов
/ 28 декабря 2011

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

статическая принадлежность = [функциональность: функциональность]

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

...