ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# 10.5\. 修改持久对象 _事务中的持久实例_(就是通过`session`装载、保存、创建或者查询出的对象) 被应用程序操作所造成的任何修改都会在`Session`被_刷出(flushed)_的时候被持久化(本章后面会详细讨论)。 这里不需要调用某个特定的方法(比如`update()`,设计它的目的是不同的)将你的修改持久化。 所以最直接的更新一个对象的方法就是在`Session`处于打开状态时`load()`它,然后直接修改即可: ``` DomesticCat cat = (DomesticCat) sess.load( Cat.class, new Long(69) ); cat.setName("PK"); sess.flush(); // changes to cat are automatically detected and persisted ``` 有时这种程序模型效率低下,因为它在同一Session里需要一条SQL `SELECT`语句(用于加载对象) 以及一条SQL `UPDATE`语句(持久化更新的状态)。 为此Hibernate提供了另一种途径,使用脱管(detached)实例。 _请注意Hibernate本身不提供直接执行`UPDATE`或`DELETE`语句的API。 Hibernate提供的是__状态管理(state management)_服务,你不必考虑要使用的_语句(statements)_。 JDBC是出色的执行SQL语句的API,任何时候调用`session.connection()`你都可以得到一个JDBC `Connection`对象。 此外,在联机事务处理(OLTP)程序中,大量操作(mass operations)与对象/关系映射的观点是相冲突的。 Hibernate的将来版本可能会提供专门的进行大量操作(mass operation)的功能。 参考[第 13 章 _批量处理(Batch processing)_](../Text/pr01_split_000.html "第 13 章 批量处理(Batch processing)"),寻找一些可用的批量(batch)操作技巧。