save()在hibernate中进行db调用吗?

时间:2015-08-30 15:29:53

标签: hibernate

我试图在事务边界之外保存()一个实体。从我读过的互联网文章中,它会立即发出db调用。但在我的例子中,如果我写了flush(),那么只有它正在进行db调用。

http://www.journaldev.com/3481/hibernate-save-vs-saveorupdate-vs-persist-vs-merge-vs-update-explanation-with-examples

从我的例子中,我了解到只有txn.commit()或flush()进行数据库调用。 Save()不会调用db。

save()会调用db吗?

我正在使用postgresql db,hibernate 4.3.1版本。

1 个答案:

答案 0 :(得分:1)

save()将给定实体绑定到会话,生成其ID并返回它。

链接文章错误地假设save()总是立即插入实体,但那是错误的。它在特定情况下执行,因为它们使用IDENTITY生成器,并且为具有此类生成器的实体生成ID的唯一方法是在数据库中插入一行并获取数据库生成的ID。

如果使用序列生成器,则只会看到正在执行的查询以获取下一个序列值(除非它在内存中具有可用ID的缓存)。如果您使用UUID生成器,您将无法看到正在执行的任何查询。