объект ссылается на несохраненный временный экземпляр, сохраните временный экземпляр перед сбросом - PullRequest
4 голосов
/ 06 июля 2011

У меня есть класс сущности self join employee с столбцами id, name и ref, который имеет отношение к нему self.Я хочу создать новый экземпляр этого и сохранить его в БД.

сначала я создал экземпляр класса Employee и назвал его manager.Затем я выбрал запись из таблицы Employee со следующими значениями: Id = 1, Name = "A", RefId = null и установил эти значения в объект менеджера.после этого я снова создал экземпляр класса Employee
и установил значение его свойств следующим образом: emp.Name = "B", emp.Ref = manager.наконец я сохранил его, используя метод base.Add (resource).в то время Nhibernate выдал следующую ошибку: «объект ссылается на несохраненный временный экземпляр, сохраните временный экземпляр перед сбросом».

это отображение содержимого файла:

<class name="Employee" table="Employee" schema="dbo" optimistic-lock="none" lazy="true">
    <id name="Id" access="property" column="Id">
        <generator class="identity" />
    </id>
    <property name="Name" type="String" column="Name" length="50" />
    <property name="RefId" type="Int64" column="RefId"  insert="false" update="false"/>
    <many-to-one name="Ref" class="Employee" column="RefId" not-null="false" fetch="select" />
 class>

, пожалуйста, помогите мне решить эту ошибку.ТНХ

1 Ответ

3 голосов
/ 08 июля 2011

Допустим, сущность 1 - это существующая запись в базе данных, а сущность 2 - это новая запись, которую вы пытаетесь создать, которая имеет ссылку на сущность 1.

Hibernate сообщает вам, что новая сущность(объект 2), который вы сохраняете, имеет ссылку на объект 1 (тот из базы данных), и этот объект 1 имеет несохраненные изменения, которые должны быть сохранены, прежде чем он сможет сохранить объект 2. Сначала проще всего сохранить объект 1,затем сохраните сущность 2. Но я думаю, что реальная проблема заключается в том, как вы получаете экземпляр Entity1.

Вы говорите, что вы создаете и экземпляр Employee, затем называете его Manager, а затем получаете запись от сотрудника.Таблица.Если вы пытаетесь обновить существующую запись из таблицы, почему бы вам сначала не получить объект, а затем отредактировать его?Почему вы создаете объект вообще?Другая вещь, в которой я не был уверен, была ли связь между объектами двунаправленной.Таким образом, у сущности 1 есть FK для сущности 2, а также у сущности 2 есть FK для сущности 1. В этом случае вам необходимо убедиться, что вы дважды присваиваете свое свойство "Ref".Entityy1.Ref = Entity2 И ТАКЖЕ Entity2.Ref = Entity1.

...