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),寻找一些可用的批量(batch)操作技巧。
当前内容版权归 wizardforcel 或其关联方所有,如需对内容或内容相关联开源项目进行关注与资助,请访问 wizardforcel .