Hibernate中性能优化涉及的知识点:
对象的三种状态
一级缓存和快照
延迟加载策略
抓取策略
整合c3p0连接池
二级缓存
Hibernate中对象的三种状态:
临时态(Transient):
没有被session管理,没有OID
瞬时态对象不会被持久化到数据库中,也不会被赋予持久化标识(identifier)
如果瞬时态对象在程序中没有被引用,会被gc销毁
又称瞬时态
持久态(Persistent):
被session管理,有OID
处于持久态的对象也成为PO(Persistent Object),PO可以直接影响到数据库的数据
在数据库中有对应的记录,并拥有持久化标识
Hibernate会检测PO的任何改动,在当前操作单元执行完毕后将对象数据与数据库同步,不需要手动执行update
游离态(Detached):
没有被session管理,有OID
与PO关联的session被关闭后,对象就变成游离态
对游离态对象的引用依然有效,对象可以被继续修改
游离态对象如果重新被关联到某个session上,会再次变为PO
又称脱管态
参考链接:
http://blog.csdn.net/redarmy_chen/article/details/7069482
http://blog.csdn.net/mr_linjw/article/details/45249363
Test:
//临时态:没有被session管理,没有OID Customer c = new Customer(); c.setName("draco"); System.out.println("OID1:"+c.getId()); //持久态:被session管理,有OID session.save(c); System.out.println("OID2:"+c.getId()); //游离态:没有被session管理,有OID tx.commit(); session.close(); System.out.println("OID3:"+c.getId());
Console:
OID1:null Hibernate: insert into t_customer (c_name, c_gender, c_age, c_level) values (?, ?, ?, ?) OID2:16 OID3:16