Hibernate入门BLOG [三、session的常用方法和hibernate对象的3种状态]

本文详细解析了Hibernate中Session的常用方法,包括事务管理、对象状态转换、CRUD操作等,并解释了JavaBean对象在Hibernate中的三种状态及saveOrUpdate方法的工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Hibernate中Session的常用方法 在Hibernate中我们经常用session对象去操作数据库的CRUD。下面我们就来分析一下 session的常用方法: void SessionTest(){ User user = new User(); Session s = HibernateUtil.getSession(); //开始事务 s.beginTransaction(); //清理缓存 s.clear(); //关闭session s.close(); //跟局ID查询相应对象 s.get(User.class, 5); //删除对象 s.delete(user); //将session和数据库进行一次同步 s.flush(); //懒加载。当load一个对象的时候,对象返回的永远都不会为空 s.load(User.class, 4); //更新,更新完的对象还是处于托管状态 s.merge(user); //save和persist都是保存。他们的不同点在于 //save如果不开启事务那么会insert一次。但是会rollback回来 //persist如果不开启事务它根本就不会insert。这就是他们的根本区别 s.persist(user); s.save(user); } --------------------------------------------------------------------- Hibernate对象中的三种状态与saveOrUpdate方法: JavaBean对象对于hibernate的状态: 瞬时状态:我们自己new的对象时一个瞬时对象。 持久对象:数据库中的数据与之对象。它和session是有关系的,当持久化对象发生变化时数据库中的对象能与之对应 托管(游离):数据库中有数据和他对象。但是它和session对象已经没有关系了。它发生变化但是数据库中不会发生相应的变化 托管对象和瞬时对象有什么区别? 1、瞬时对象和数据库没有关系和session也没有关系,生命周期很短 2、托管是说和数据库有数据对应。但是没有在session里面。就算托管对象发生了变化hibernate也不会觉察。 当托管对象需要更新的时候我们就需要调用update方法。如果是持久化对象被修改了那么会运行相关的sql语句改变数据库 saveOrUpdate如何判断是save还是update 根据ID和version来判断。如果如果id为空或者为0那么是瞬时对象那就为save如果id不为空那就可能是托管对象就调用update语句 merge merge更新完之后的对象还是托管对象。非持久对象。而上面的saveOrUpdate操作完的对象为持久化对象 <!-- id表示主键,而name=id指的是类里面的属性。也就是主键对应的属性 unsaved-value设定它是否为瞬时对象的设定。默认会为下面的这个值, 如果不修改的话那么int值为0String值为空 --> <id name="id" unsaved-value="-1"> <!-- 主键生成器 --> <generator class="native"/> </id>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值