Hibernate - session.delete () не устанавливает идентификатор в ноль - PullRequest
1 голос
/ 14 марта 2012

У меня есть 2 класса, и они отображаются как 1-к-1

класс B отображение:

<one-to-one class="ClassA" constrained="true" name="a" property-ref="bId"/>

класс A отображение:

<property insert="false" name="bId" type="integer" update="false">
      <column length="200" name="BID" not-null="false"/>
 </property>
 <many-to-one class="ClassB"  name="b">
       <column name="BID" not-null="false"/>
 </many-to-one>

при вызове:

A a = (A) session.load(A.class, 1);    
session.delete(a.getB());

B запись удаляется, но BID в A остается без изменений.Зачем!?Любая помощь приветствуется.

1 Ответ

1 голос
/ 14 марта 2012

Да, это правильно. Hibernate не изменяет объект a. Hibernate не может этого сделать. В вызове session.delete(a.getB()) вы указываете экземпляр класса B. Этот экземпляр не содержит никакой ссылки на объект a.

Вы должны изменить вручную и обновить его.

Другая возможность:

Вы перемещаете внешний ключ из A в B (в отношениях один к одному не имеет значения, какая таблица имеет внешний ключ). Когда вы удаляете экземпляр B, вам не нужно обновлять A. [Или вы используете cascade=all,delete-orphan, тогда вы можете установить для ссылки в a значение null и обновить a, что заставит hibernate удалить экземпляр B Но я никогда не пробовал такую ​​возможность.]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...