【问题标题】:NHibernate collections and moving objectsNHibernate 集合和移动对象
【发布时间】:2009-04-27 01:43:56
【问题描述】:

我刚刚在使用 NHibernate 时遇到了一个重大问题。我有 2 个对象,每个对象都有一组东西。我需要将一个东西从对象 A 的集合中移到对象 B 的集合中。我收到有关已删除对象的错误,因为我相信 NHibernate 在需要保留它时会尝试从对象 A 的集合中删除它对于对象 B。 从数据库的角度来看,这只是将“父”属性更新为新对象(对象 B)的问题。但是对于这些系列,我真的不确定该怎么做......

在 NHibernate 中是否有一个众所周知的过程可以将对象从一个集合移动到另一个集合?

提前感谢您的帮助。

问候,

埃里克。

【问题讨论】:

  • 你是如何映射这些集合的?

标签: nhibernate collections


【解决方案1】:

我假设您在由对象 A 和 B 表示的类的映射中使用 Cascade,即 A 和 B 都是某个类 X 的实例,并且 X 的映射包含集合上的级联属性,其中包含要转移的对象。

鉴于这种假设,这可能会有所帮助。

如果您希望能够将对象从一个集合转移到另一个集合,您需要考虑被移动的东西是否应该具有独立于两个集合的存在。

如果传输对象没有自行保存,您在进行传输时会遇到问题,因为会话已经知道传输的对象。

我能想到两种方法。两者中更好的可能是将传输对象视为一个独立的对象,它自己保存到数据库中(即,在对象与集合的映射中不依赖级联)。从概念上讲,这是有道理的,因为如果您可以将它从一个集合转移到另一个集合,这意味着它以某种方式独立于具有集合的两个对象。这确实意味着您最终可能会成为孤儿。

如果您想在映射中坚持使用级联,那么您需要在与添加到对象 B 不同的事务中从对象 A 中删除。我怀疑这不是您想要做的。

【讨论】:

  • 罗布,感谢您的回答。几天后我们最终放弃了 NHibernate,由于某些原因,我不记得看到我的线程回复的通知。无论如何感谢您的帮助。
【解决方案2】:

您是否尝试过使用

进行映射

cascade="all-delete-orphan"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多