Hibernate的对象三态以及cascade
对于需要被持久化的Java对象,在它的生命周期中,可处于三种状态:
1.临时状态(transient):刚刚用new语句创建,还没有被持久化,不处于Session缓存中
特征:不处于Session的缓存中,也可以说,不被任何一个Session实例关联
在数据库中没有对应的记录
2.持久化状态(persistent):已经被持久化,加入到Session的缓存中
特征:位于一个Session实例的缓存中,也可以说,持久化对象总是被一个Session实例关联
与数据库中的相关记录对应
Session在清理缓存时,会根据持久化对象的属性变化来同步更新数据库
3.游离状态(detached):已经被持久化,但不再处于Session的缓存中
特征:不处于Session的缓存中,也可以说,不被任何一个Session实例关联
游离对象是由持久化对象转变过来的,因此在数据库中有可能还存在与它对应的记录(如果没有其它程序删除了那条记录)
关于cascade属性
none:在保存、更新或删除当前对象时,忽略其他关联的对象。它是cascade属性的默认值
save-update:当通过Session的save()、update以及saveOrUpdate()方法来保存或更新当前对象时,级联保存所有关联的新建的临时对象,并且级联更新所有关联的游离对象
delete:当通过Session的delete()方法删除当前对象时,级联删除所有关联的对象
all:包含save-update以及delete的行为。此外,对当前对象执行evict()或lock()操作时,也会对所有关联的持久化对象执行evict()或lock()操作
delete-orphan:删除所有和当前对象解除关联关系的对象
all-delete-orphan:包含all和delete-orphan的行为







0 评论:
发表评论