Hibernate的saveOrUpdate/clear/flush

本文介绍了使用Hibernate框架中的saveOrUpdate方法进行数据保存与更新的操作,并详细解释了一级缓存的使用方式及其对数据查询的影响,同时展示了如何利用flush方法实现内存与数据库的同步。

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

1.saveOrUpdate

Teacher teacher = new Teacher();
teacher.setName("赵三");
teacher.setTitle("哈哈哈");

Session session = sf.getCurrentSession();
Transaction t = session.beginTransaction();
session.saveOrUpdate(teacher);
teacher.setName("李四");
session.saveOrUpdate(teacher);
t.commit();

 

第一次save,第一次update

2.clear:无论是get还是load,都会首先查找缓存(一级缓存),如果没有,才会去数据库中查找,调用clear()方法可以强制清除session缓存。

Session session = sf.getCurrentSession();
Transaction t = session.beginTransaction();
Teacher teacher = (Teacher) session.get(Teacher.class, 1);
System.out.println(teacher.getName());
session.clear();
Teacher teacher2 = (Teacher) session.get(Teacher.class, 1);
System.out.println(teacher2.getName());
t.commit();

 

没有session.clear();这句,只在执行System.out.println(teacher.getName());的时候执行一次sql查询。

session.clear();这句,会在System.out.println(teacher.getName());System.out.println(teacher2.getName());分别执行一次。

loadget的情况一样,只不过执行sql查询的地方不一样。

3.flush:可以强制进行从内存到数据库的同步

Session session = sf.getCurrentSession();
Transaction t = session.beginTransaction();
Teacher teacher = (Teacher) session.get(Teacher.class, 1);
teacher.setName("张三");
session.flush();
teacher.setName("李四");
t.commit();

 

没有session.flush();这句,只会执行一次update语句。

session.flush();这句,只会执行两次update语句。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值