Изменение типа данных ссылки [hasMany:] на список?

Есть ли способ изменить тип данных определения static hasMany = [myList: Stuff] в Grails? Я старался

List<Stuff> myList
hasMany = [myList : Stuff]

но мои существующие тесты начали бросать

Stuff._MyContainer_mylistBackref; nested exception is org.hibernate.PropertyValueException: not-null property references a null or transient value

что указывает на то, что они не эквивалентны с точки зрения того, как с ними обращаются. Что я здесь делаю неправильно?


person Stefan Kendall    schedule 21.03.2011    source источник
comment
Нужна дополнительная информация о контексте исключения. List для hasMany у меня нормально работало.   -  person Victor Sergienko    schedule 21.03.2011
comment
Должно ли это вести себя иначе, чем [myList: Stuff]? Если мне нужен набор, это работает нормально, что заставляет меня поверить, что больший сегмент кода в порядке.   -  person Stefan Kendall    schedule 21.03.2011
comment
Разве это не то, что ваш myList просто имеет значение null и никогда не инициализируется? Разве он не должен читать List‹Stuff› myList = [] ?   -  person julx    schedule 22.03.2011


Ответы (1)


Как описано в разделе 5.2.4 руководства по Grails, это правильный способ сделать коллекцию List.

Я подозреваю, что проблема в том, что по умолчанию ограничение nullable(false) применяется ко всем свойствам класса домена, и вы пытаетесь сохранить нулевое значение для этого свойства. Чтобы исправить это, добавьте ограничение, которое позволяет этому свойству быть нулевым (если это то, что вы хотите

List myList
static constraints = {
    myList(nullable: true)
}

В качестве альтернативы убедитесь, что свойство не равно null, прежде чем объект будет проверен/сохранен.

person Dónal    schedule 22.03.2011
comment
Я всегда использую только динамический метод addToMyList, поэтому разве это не должно решаться автоматически? - person Stefan Kendall; 22.03.2011