0

我有一个带有这样的休眠映射的类:...

基本上我用一些 StreamRef 传播一个新的(或旧的)磁带,然后点击

 session.saveOrUpdate(tapeInstance);

如果磁带是旧的或新的。我添加的流引用都是新的(但如果我从数据库中检索磁带,我希望能够轻松访问它的流引用)。

不幸的是,我似乎不能像我想要的那样“懒惰”——我想要的行为基本上是“如果磁带是新的,那么这意味着它的所有流都是新的,所以永远不要查看如果您可以对它们进行更新,请始终插入它们”,但是“如果磁带是旧的,请更新它,删除其旧的流引用,然后将新的流添加到其中——它们将永远是新的/唯一的,所以只需添加它们”所以基本上,不要级联更新,而是级联保存。这可能吗?

我通过设置 cascade="merge, delete, lock, refresh, evict, replicate, delete-orphan" (基本上,它缺少保存更新),然后手动删除所有旧流,然后手动添加每个流, 一次一个。有没有更好的办法?

4

1 回答 1

1

通过设置 cascade="AllDeleteOrphan",可以通过列表进行插入和删除。为了避免更新,我们需要为主键正确指定一个未保存的值。NHibernate 然后将使用主键的值来确定它是新实例还是现有实例。注意:通过使用“AllDeleteOrphan”级联选项,如果一个tapeInstance 被删除,所有关联的streamref 都会被删除。

于 2012-10-08T21:54:46.633 回答