NHibernate的ISession公开了一个带有两个重载的方法Persist()。我无法在任何地方找到有关此方法的文档。在http://nhibernate.info/doc/nh/en/index.html上的NHibernate参考资料中甚至没有提到它。
这种方法是否已弃用,还是会被弃用?什么时候应该使用?它与SaveOrUpdate()相比如何?
任何指针都会非常感激。
答案 0 :(得分:4)
此帖子http://opensource.atlassian.com/projects/hibernate/browse/HHH-1273的最后一条评论非常清楚:
persist()定义明确。它成了一个 瞬态实例持久化。 但是,它并不能保证 标识符值将分配给 持久化实例, 分配可能发生在同花顺 时间。规范没有说,哪个 是我用persist()的问题。
persist()也保证它会 如果它不执行INSERT语句 在交易之外被称为 边界。这很有用 与...长期对话 扩展的会话/持久化上下文。
需要像persist()这样的方法。
save()不保证一样,它 返回一个标识符,如果是 必须执行INSERT才能获得 标识符(例如“身份”生成器, 不是“序列”),这个INSERT发生了 不管你是不是立刻 交易内部或外部。 这在长期运行中并不好 与扩展的对话 会话/持久化上下文。
从我从其他来源收集的内容看来,具有cascade =“persist”的实体将在调用时级联,而不是在刷新时级联。这也许非常有用。