Hibernate几个易混淆方法解析及对象状态解析
来源:互联网 发布:windows live登陆 编辑:程序博客网 时间:2024/06/01 22:20
举例说明:
User user=session.load(User.class,1);
其一:
此时,load方法并不会执行,而是要等到user对象第一次被使用到的时候才会执行load方法
比如,我现在写一条打印语句:
System.out.println(user.getClass().getName());
此时,load方法将会执行
其二:
load方法得到的返回值永远都不会为空,即时在你的数据库中并没有你所查找的数据
因为,load内部会自动new了一个继承于User的子类的对象,所以,对load的返回值做判空操作是多余的。
我们可以通过:
System.out.println(user.getClass().getName());来查看返回值的类型。
比如,我测试:
UserPojo user = (UserPojo) session.load(UserPojo.class, 1);
System.out.println("返回值类型:"+user.getClass().getName());
得到的一个结果为:
返回值类型:cn.com.pojo.UserPojo$$EnhancerByCGLIB$$efc4150e
我们将load的这种机制,叫做懒加载
persist与save的方法的区别:
如果没有开启事务,save方法会执行插入语句,然后回滚;而persist根本就不会执行插入语句。
在Hibernate中,存在三种状态的对象:
瞬时状态(transient):数据库中没有数据与之对应,超过作用域会被JVM垃圾回收期回收,一般是new出来
且与session没有关联的对象。
持久状态(persistent):数据库中有数据与之对应,当前与session有关联,并且相关联的session没有关闭
,事务没有提交:持久对象状态发生该改变,在事务提交时会影响到数据库(Hibernate能够检测到)
脱管状态(detached):数据库中有数据与之对应,但当没有session与之关联;托管对对象状态发生改变,
Hibernate不能检测到。
所以对于持久状态的对象,我们想要跟新起对应的数据库中的数据,无需调用update方法,直接修改对象属性
,即可被Hibernate检测到,自动的会生成跟新语句,但这时候并不会立刻执行,而是等到提交的时候在并执
行。
所以可以说,update方法是用来操作脱管状态对象的,而insert方法是用来操作瞬时状态对象的。
当我们无法确定一个对象是处于何种状态,这时候,可以调用saveOrUpdate方法,由Hibernate自动判断状态
,执行相应的方法。Hibernate是通过配置文件中,主键id元素的属性unsave-value来判断的,如果是整形,
则unsave-value默认值为0,如果是String类型,则默认值为null;如果为0或null则表示未保存,是非持久状
态,我们也可以指定unsave-value的值,比如可以指定当unsave-value=-1的时候表示未保存。
对象状态转换解析图:
- Hibernate几个易混淆方法解析及对象状态解析
- Hibernate几个易混淆方法解析及对象状态解析
- HIbernate中对象的三种状态和session的几个易混淆的方法的区别
- hibernate中对象的状态解析
- Hibernate对象状态及方法详解
- 解析eclipse下生成Hibernate DAO中的几个方法
- jQuery之内部插入易混淆方法解析
- Hibernate优化方法解析
- Hibernate优化方法解析
- Hibernate优化方法解析
- hibernate几个易混淆的关联关系
- Hibernate状态 (merge,attachDirty,attachClean)解析
- ORM进阶之Hibernate中对象的三大状态解析
- jsp的内置对象及方法简单解析
- Hibernate 实体对象的状态及转化
- Hibernate 实体对象的状态及转化
- Hibernate中实体对象生命周期及状态
- android 的混淆解析
- chmod 4755和chmod 755的区别
- VC辅助工具大全
- 划分软件开发人员的两种尺度
- 在hibernate中使用HQL语句和QBC两种方法进行查询
- 散列使得查询速度提升,HashMap如此快的原因
- Hibernate几个易混淆方法解析及对象状态解析
- python之读写文件
- 析构函数可以是纯虚函数
- java连接mysql增加人员信息
- 在工厂模式里面利用反射机制动态调用对象方法
- android知识点
- redhat系统 重置root密码
- python之正则
- 《Java编程思想》学习笔记7——泛型编程基础