我试图在事务边界之外保存()一个实体。从我读过的互联网文章中,它会立即发出db调用。但在我的例子中,如果我写了flush(),那么只有它正在进行db调用。
从我的例子中,我了解到只有txn.commit()或flush()进行数据库调用。 Save()不会调用db。
save()会调用db吗?
我正在使用postgresql db,hibernate 4.3.1版本。
答案 0 :(得分:1)
save()将给定实体绑定到会话,生成其ID并返回它。
链接文章错误地假设save()总是立即插入实体,但那是错误的。它在特定情况下执行,因为它们使用IDENTITY生成器,并且为具有此类生成器的实体生成ID的唯一方法是在数据库中插入一行并获取数据库生成的ID。
如果使用序列生成器,则只会看到正在执行的查询以获取下一个序列值(除非它在内存中具有可用ID的缓存)。如果您使用UUID生成器,您将无法看到正在执行的任何查询。