Hibernate持久化对象的状态
Posted auhnayuiL
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hibernate持久化对象的状态相关的知识,希望对你有一定的参考价值。
简介
以前学习Hibernate的笔记,整理一下便发出来了,防止弄丢。有错误的话麻烦各位留言评论,感激不尽。
持久化类
Hibernate完成了从面向对象模型表示的对象至关系模型表示的数据结构的映射,可以用面向对象的方式来处理数据库中记录。通过映射文件或注解,将持久化类映射为数据库中的表,而不需要继承任何类或者接口(即,低入侵式设计)
- 但有几点最基本的要求:
- 无参构造器
- 标识属性,最好使用基本类型的包装类
- 相应的getter/setter方法
瞬态
由new创建的对象且未与Session关联. 该状态下对象未被赋予标识值,且所进行的任何修改不会保存到数据库. 最终会被GC所回收.
持久态
与Session相关联,被添加至Session内部的集合属性,拥有与数据库中对应的标识ID,任何更改都会被Session所检测且更新数据库中的记录。当然,这在session的事务没有关闭之前才有效。
脱管
之前是持久化状态,现在与Session脱离关联,对象的改动也不会更新到数据库中,之后可以通过update()恢复为持久化状态。可以实现逻辑上的长事务。
三种状态之间的转化
区别
save()与persist(): 区别于是否立刻执行底层的insert语句,是否返回记录的主键值
get()与load(): 区别于是否延迟加载。若存在记录,load()返回只含有标识值的代理对象,get()直接从数据库中获取。若不存在,load()返回不含标识值的空代理对象(映射文件中已开启懒加载),get()返回null
参考文档
[轻量级Java_EE企业应用实战] https://book.douban.com/subject/6002664/
以上是关于Hibernate持久化对象的状态的主要内容,如果未能解决你的问题,请参考以下文章