2009-11-09 1 views
0

У меня есть объект «Экземпляр» с другим объектом «Курс» внутри. При попытке упорствовать новый объект Instance, я получаю следующее сообщение об ошибке, если курс является недействительным:Toplink пытается сохранить нулевой объект

java.lang.IllegalStateException: During synchronization a new object was found through a relationship that was not marked cascade PERSIST: null 

Вот мои аннотации для курса:

@OneToOne(cascade = CascadeType.REFRESH,optional=true) 
    public Course getCourse() { 
     return course; 
    } 

Я не понимаю, почему он пытается сохраняться то, что является нулевым. Если оно равно null, оно должно просто оставить это поле null в базе данных правильно?

+0

Похожее: http://stackoverflow.com/questions/585454/ejb3-and-manual-hierarchy-persistence –

ответ

1

Я не понимаю, почему он пытается сохранить то, что является нулевым. Если оно равно null, оно должно просто оставить это поле null в базе данных правильно?

По умолчанию TopLink JPA предполагает, что все поля объекта являются постоянными. Если вы хотите указать поле или свойство объекта, который не является постоянным, вам необходимо пометить его @Transient (но это не то, что вы хотите здесь).

Итак, для меня эта ошибка является результатом того, что не задан правильный тип каскада для конца OneToOne отношения в объекте Instance. Не могу сказать, почему вы не используете ALL, но вам нужно хотя бы добавить PERSIST.