我刚刚用NHibernate遇到了一个重大问题。我有2个对象,每个对象都有一组东西。我需要将一个东西从集合中从对象A移动到对象B的集合。我得到一个关于已删除对象的错误,因为我相信,当它需要保留它时,NHibernate会尝试从对象A的集合中删除该东西对象B. 从数据库的角度来看,只需将“父”属性更新为新对象(对象B)即可。但是对于收藏品,我不确定该做些什么......
在NHibernate中是否有一个众所周知的过程将对象从一个集合移动到另一个集合中?
提前感谢您的帮助。
此致
埃里克。
答案 0 :(得分:3)
我假设您在对象A和B表示的类的映射中使用Cascade,即A和B都是某个类X的实例,并且X的映射包含包含该类的集合的级联属性要转移的对象。
考虑到这个假设,这可能有所帮助。
如果您希望能够将对象从一个集合转移到另一个集合,则需要考虑正在移动的事物是否应该具有独立于两个集合的存在。
如果传输对象没有自行保存,则在执行传输时会遇到问题,因为会话已知传输的对象。
我有两种方法可以想到。两者中较好的一种可能是将传输对象视为一个独立的对象,它自己保存到db(即,不依赖于层对象与集合的映射)。从概念上讲,这是有道理的,因为如果你可以将它从一个集合转移到另一个集合,这意味着它不知何故它独立于具有集合的两个对象。这确实意味着你最终可能会遇到孤儿。
如果你想坚持在映射中使用级联,那么你将需要在对象A的另一个事务中从对象A中删除而不是添加到对象B.我怀疑这不是你想要做的。
答案 1 :(得分:0)
您是否尝试过使用
进行制图级联= “全删除-孤儿”