Hibernate的主键生成策略和对象状态以及SQL发送时机的研究

网上大部分文章在介绍Hibernate的对象状态和SQL发送时机的时候,默认都是假设主键生成策略是native(数据库管理)或increment(Hibernate管理)的情况,这里就忽略了手动管理(assigned)的情况了。这里做一个简单的总结:

情况1:主键策略是手动管理的:

★ 手动管理——保存,含有OID的对象都会作为游离态处理,事务提交时发送SQL。

★ 手动管理——删除,Hibernate会无视对象的状态,只要做删除,就会根据OID先执行一次持久化,然后在事务提交时发送SQL。

情况2:主键策略是自动管理的:

★ 自动管理——保存,Hibernate会无视手动设置的OID,依靠策略判断对象的OID,如果OID由Hibernate管理,那么保存的对象就会被看作游离态,在事务提交时发送SQL,如果由数据库管理,则Hibernate在保存时并不知道OID,因此会把对象看作瞬态,在save指令执行时发送SQL。

★ 自动管理——删除,Hibernate会无视对象的状态,只要对象含有OID,就会直接把OID作为参数,在事务提交时发送SQL。


更新操作,无论何种主键生成策略,只要在一个事务空间内对持久化对象进行属性更改,都会在事务提交时发送SQL。




你可能感兴趣的:(Hibernate的主键生成策略和对象状态以及SQL发送时机的研究)