【问题标题】:How to set foreign key to null when referenced object deleted删除引用的对象时如何将外键设置为null
【发布时间】:2012-03-30 15:14:09
【问题描述】:

我有一个包含电话号码列表的电话簿类。然后我有另一个引用PhoneNumber的类“Account”。此引用可以为空,因此帐户不必有电话号码。

我希望能够保存电话簿,让它保存/更新/删除所有电话号码,如果任何电话号码被删除,我想取消使用此号码的任何帐户。除了最后一部分,一切都在工作;如果我删除正在使用的电话号码,它也会删除帐户,我不想发生这种情况,我只是希望它清除它的参考。我确定这只是因为我的级联或映射错误,我只是不知道将它们设置为什么。

实际保存的代码比较简单。顺便说一句,如果有人能告诉我为什么我必须合并以确保删除电话号码,那就太棒了。

var session = SessionFactory.GetCurrentSession();
book = (PhoneBookDto) session.Merge(book);
session.SaveOrUpdate(book);

当前相关映射:

PhoneBook.hbm.xml

...
<bag cascade="all-delete-orphan" inverse="true" name="PhoneNumbers">
  <key>
    <column name="phone_book_id" />
  </key>
  <one-to-many class="DataLibrary.dto.PhoneNumberDto, DataLibrary" />
</bag>
...

电话号码.hbm.xml

...

<many-to-one cascade="none" class="DataLibrary.dto.PhoneBookDto, DataLibrary" name="PhoneBook">
  <column name="phone_book_id" />
</many-to-one>

...

帐户.hbm.xml

...

<many-to-one cascade="none" class="DataLibrary.dto.PhoneNumberDto, DataLibrary" name="PhoneNumber">
  <column name="phone_number_id" />
</many-to-one>

...

提前致谢!

编辑:

Firo 为我指明了正确的方向,即使我并不真正需要它,我也必须在 PhoneNumber 上设置一个集合返回到 Account,并将其设置为 inverse=false:

<bag cascade="none" inverse="false" name="Accounts">
  <key>
    <column name="phone_number_id" />
  </key>
  <one-to-many class="DataLibrary.dto.AccountDto, DataLibrary" />
</bag>

当我这样做时,它起作用了。有没有办法做到这一点,这样我就不必将 PhoneNumber 与 Account 关联起来?

【问题讨论】:

  • 您是否在 PhoneNumber 中使用 Cascade.remove 收集帐户?

标签: nhibernate mapping parent-child cascade


【解决方案1】:

“为什么我必须合并以确保删除电话号码”:

要么是因为您从更改跟踪中删除了 Phonenumbers(加载图书的关闭会话),要么是因为最后没有刷新,而合并将立即刷新 SaveOrUpdate 只会添加到下一个会话执行的批处理中。刷新()。

“它也会删除帐户”

也许是因为:

<bag cascade="all" class="Account" name="Accounts">
</bag>

【讨论】:

  • 我实际上没有从 PhoneNumber 到 Account 的关联。但是,我尝试添加它: 但是,该帐户仍然被删除。 :( 抱歉,我的评论格式似乎不正确。
  • 实际上这确实为我指明了正确的方向。我必须把它变成一个集合,并确保 inverse 设置为 false: key>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-03
  • 2013-03-22
  • 2021-03-20
  • 2020-12-02
  • 1970-01-01
  • 2021-01-21
相关资源
最近更新 更多