`

Hibernate笔记(一):基础概念与Hibernate中对象的三种状态

 
阅读更多
Hibernate 初始化配置:
Configuration cfg = new Configuration();
cfg.configure();
SessionFactory sf = cfg.buildSessionFactory();
Session s = sf.openSession()

HibernateUtils类:
写法

Session的主要方法:
获得指定记录(根据ID):
session.get(User.class, id) 和 session.load(User.class, id)的区别: load是懒加载,该对象在被真正用到时才会真正得到该类的实例

懒加载实际上是new()了一个该类的子类并返回,因此懒加载的类不能是Final的,就是这个道理.
所以在load一个类后,也不要做if(user1!=null) … 类似的代码,因为不可能为空.
但get()方法如果找不到该对象会返回null值

保存记录:
session.save() 和 session.persist()方法的区别: 是否开启事务的区别,persist()必须在事务中,否则不会产生insert语句

saveOrUpdate()和merge() :根据ID和version的值来确定是save还是update,调用merge你的对象还是脱管(游离)的

lock(),取出数据并把对象变成持久对象,但不会同步对象的状态

Hibernate管理的数据对象的几种形态:
先来一张官方图先:


瞬时(Transient):自己new出来的对象有,与DB和Session没有任何关系
持久(persistent):与Session进行了关联,发生任何变化,Session都是知道的。在事务提交时会更新到DB。
脱管(detached):虽然与Session也没有关系了,但它实际上DB中的一条记录。

所以save()针对瞬时对象,update()针对脱管对象
  • 描述: hibernate状态图
  • 大小: 36.2 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics