hibernate保存方法 - 在事务之外

时间:2017-01-01 02:58:05

标签: java hibernate

从以下链接:

save()方法不保证相同,它返回一个标识符,如果必须执行INSERT来获取标识符(例如“identity”生成器),则无论你是否在内部,这个INSERT都会立即发生在交易之外。

http://javarevisited.blogspot.com/2012/09/difference-hibernate-save-vs-persist-and-saveOrUpdate.html

我有这样的疑问:即使在交易之外,如何立即保存方法?因为如果插入发生意味着它正在访问数据库,那么如何在没有任何事务的情况下进行数据库操作? AFAIK事务的最小粒度是单个insert / update / select / delete语句。所以我需要澄清一下。

1 个答案:

答案 0 :(得分:1)

当从数据库中检索实体时,它将附加到会话并仍然是其中的一部分 会话直到会话(及其交易)结束。同样, 当添加或更新实体时,这些更改也会附加到会话,并且当一个 实体从数据库中删除,它将从Session中删除。

但是,您的陈述(或您提供的任何链接)都是真的。

Hibernate save() 可以用于将实体保存到数据库。我们可以在事务外调用此方法。如果我们在没有事务的情况下使用它,并且我们在实体之间进行级联,那么只有主要实体才会被保存,除非我们刷新会话。

您可以找到一个有效的示例here