Спящий режим OneToMany — объект ссылается на несохраненный временный экземпляр

#java #database #hibernate #jpa

Вопрос:

У меня есть таблица с отношением OneToMany :

 lt;hibernate-mappinggt;  lt;class name="com.al6.jtob.data.Lsell" table="LSELL" gt;  ...  lt;many-to-one name="stock" class="com.al6.jtob.data.Stock" insert="false" update="false"gt;  lt;column name="IDITEM" /gt;  lt;column name="IDWAREHOUSE" /gt;  lt;/many-to-onegt;  ...  lt;/classgt; lt;/hibernate-mappinggt;  

Идентификатор запаса состоит из (IDITEM, IDWAREHOUSE).

Это хорошо работает, когда я загружаю существующие объекты LSELL. Но когда я создаю новый объект LSELL, у меня возникает эта ошибка :

 Caused by: javax.ejb.EJBException: org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: com.al6.jtob.data.Stock  

Я не хочу обновлять или сохранять какие-либо новые «запасы» в базе данных, это просто данные только для чтения. Все данные о запасах являются полными и достаточными. Цель состоит в том, чтобы просто получить «запас» «Lsell», когда я показываю «Lsell».

Комментарии:

1. Пожалуйста, добавьте, как вы сохраняете сущность Lsell.

Ответ №1:

Вы забыли объявить CascadeType в реляционном отображении. вы должны поместить cascade=all тег сопоставления, потому CascadeType что он распространяет переходы сущностей от родителя к потомку. Например, если вы сохраняете родительскую сущность, упомянутые сущности также сохраняются перед сбросом.

 lt;one-to-many name="lsell" class="com.al6.jtob.data.Lsell" cascade="all"gt;  ... lt;/one-to-manygt;  

Комментарии:

1. Я понимаю, но я, если создается «Lsell», связанный «запас» уже находится в таблице базы данных. Акции инициализируются один раз в день, и я не хочу ничего удалять или добавлять в эту таблицу. Я просто хочу связать «Lsell» с информацией о запасах при загрузке Lsell. Должен ли я был использовать «отсоединить» вместо «все» в этом случае ?

2. Какова ваша родительская сущность?

3. Lsell является родительской организацией.

4. cascade="all" поместите свою родительскую сущность не в дочернюю сущность. не могли бы вы, пожалуйста, показать мне вашу родительскую сущность.

5. из-за дочерней сущности получается ссылка на родительскую сущность