2013-07-15 1 views
-1

В моем приложении Grails у меня есть служба, которая создает и сохраняет ряд объектов домена. Вот пример код ниже:Объект домена Grails не может сэкономить, поскольку ID равен

for (int i = 0; i < notes.size(); i++) { 
    Note newNote = new Note() 
    newNote.description = notes[i].description 
    newNote.displayDate = notes[i].displayDate 
    newNote.book = book 
    newNote.save() 
} 

Моя экономия терпит неудачу с этой ошибкой:

ERROR util.JDBCExceptionReporter - NULL not allowed for column "FUND_ID"; 

Я создание и сохранением объектов домена во многих других местах, просто отлично. В чем проблема?

Ниже класс Примечание:

class Note { 

    String description 
    Date displayDate 

    static belongsTo = [book: Book] 
} 
+1

'FUND_ID' нет где указано в классе домена, как оно отображается? Можете ли вы показать точный класс домена, включая «Книгу»? Если Book является владельцем отношений, создается ли она сначала и добавляется в 'Note', например' book.addTo * '? – dmahapatro

+0

FUND_ID автоматически добавляется Grails в качестве первичного ключа таблицы FUND. Он должен обрабатывать генерирование своего значения автоматически. Книга добавляется к объекту Note, как показано выше, в «newNote.book = book» – user1007895

+2

Первичным ключом, добавленным Grails, будет ID. Не FUND_ID. Похоже, у вас есть обычная схема именования. Вставить класс домена –

ответ

0

Кончилось тем, что проблема транзакций. Услуги Grails являются транзакционными по умолчанию, и это был один метод транзакционной службы, вызывающий другой метод транзакционных сервисов. По какой-то причине это не понравилось. Я удалил вложенные транзакции, и теперь он работает.

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