2009-06-25 2 views
6

Я получаю следующее исключение при попытке обновить объект:Hibernate Exception помощь: TransientObjectException

org.hibernate.TransientObjectException: объект ссылается на несохраненный переходный экземпляре - сохранить переходный экземпляр перед промывкой: .... ..

Может кто-нибудь помочь ???

Объект, который я пытаюсь обновить, имеет атрибут «lazy», установленный в false в файле сопоставления. Кажется, что hibernate ожидает, что я сохраню дочерние объекты, прежде чем он сбросит обновление ???

EDIT (ДОБАВЛЕНО):

<hibernate-mapping> 
    <class name="utils.message.Message" table="messages"> 
     <id name="id" column="message_id"> 
      <generator class="native" /> 
     </id> 
     <property name="message_text" column="message_text" /> 
     <property name="message_file" column="message_file" /> 
     <property name="is_active" column="is_active" type="boolean"/> 
     <property name="is_global" column="is_global" type="boolean"/> 
     <property name="start" column="start" type="java.util.Date"/> 
     <property name="end" column="end" type="java.util.Date"/> 
     <property name="last_updated" column="last_updated" type="java.util.Date"/>  

     <many-to-one name="last_updated_by" class="utils.user.User" column="last_updated_by" lazy="false"/> 
     <many-to-one name="healthDepartment" class="utils.healthdepartment.HealthDepartment" column="health_department_id" lazy="false"/> 

    </class> 
</hibernate-mapping> 
+0

кажется, используя каскадную свойство в файле отображения может решить мою проблему ?? просто не уверен, какой стиль подходит для меня. (хотя я думаю, что использование просто-сироты было бы тем, что мне нужно). может быть немного сложно понять документы спящего режима с точки зрения новичков. – Rafael

+0

Можете ли вы опубликовать релевантные части вашего файла hibhernate или аннотации? – skaffman

ответ

0

Приложение находится в среде Spring. Исправить: запустить обновление из среды Hibernate.

+0

Что это значит? Как это ответ? –

15

TransientObjectException возникает при сохранении объекта, который ссылается на другой объект, который является временным (то есть он имеет значение идентификатора «по умолчанию», часто нуль), а затем промывать сессии. Это обычно происходит, когда вы создаете целый график новых объектов, но не сохранили их явно. Существует два способа обойти это:

  1. Как вы можете предположить, вы можете использовать каскадирование сохранений для других связанных объектов. Однако каскадирование на самом деле не предназначалось как обходное решение для ОО, а скорее как удобство для сохранения группы связанных объектов, которые часто манипулируют вместе. Если вы отсоедините свои объекты без полного набора связанных данных, а затем сохраните их с включенным каскадом, вы можете случайно удалить данные, которые вы не хотите потерять.
  2. Убедитесь, что все временные объекты на вашем графике явно сохранены как часть вашего подразделения. Это действительно просто понимание того, как ваше приложение будет создавать граф объектов и какие сущности будут временными и которые могут быть постоянными или отстраненными.

Я рекомендую прочитать всю эту главу из документации Hibernate, чтобы полностью понять терминологию переходного, стойкими и отсоединять:

http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/objectstate.html

+1

Вышеуказанный URL-адрес не работает; здесь находится новый @ http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/objectstate.html – ManuPK

0

С отношения многие-к-одному, он не будет быть подходящим для операций Hibernate для каскадного сохранения, поскольку «один» концептуально является сущностью, разделяемой между многими другими. Подобные отношения не являются «дочерним объектом», как вы выразились.

Вы можете переопределить это поведение, явно устанавливая атрибут каскада в отношении, или вы можете вручную сохранить другой конец отношений «много-к-одному».

+0

Skaffman, Спасибо за разъяснение. Я просто прочитал документ, предложенный brd6644. Это помогло лучше понять некоторые фундаментальные концепции Hibernate. В конечном счете, мне нужна помощь в том, чтобы обновить сообщение без каскадирования операции с пользователем/HD, связанным с сообщением. – Rafael

3

dude use property "cascade = true" в картографии. все будет хорошо ... V-Boy

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