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