Hibernate记录

执行顺序问题

Hibernate在最终执行SQL语句时,是按INSERT,UPDATE,DELETE的顺序执行的,而非按照代码顺序执行。

利用对象更新数据

hibernate为了优化性能,不会把sql语句直接提交给数据库,而是先放在hibernate的缓存中等待事务commit的时候一起提交,为的是利用batch操作提高数据库操作性能。
在执行commit的时候会默认执行flush将缓存中的数据请求立即转换为数据库操作并执行。

flush方法的主要作用就是清理缓存,强制数据库与Hibernate缓存同步,以保证数据的一致性。它的主要动作就是向数据库发送一系列的sql语句,并执行这些sql语句,但是不会向数据库提交(虽然数据库没有提交真是的数据没有发生变化,但是能够从session中取出已改变的数据)。而commit方法则会首先调用flush方法,然后提交事务。

利用SQL语句更新数据

SQL语句不会放在缓存中,而是直接发送给数据库(未提交),在commit的时候才会影响数据库持久化数据。

从session中查询数据但更新保存时不影响session中的数据。如果向查询更新后的数据需要使用evict清空该对象在session中的缓存然后在进行查询。(虽然还没有commit但是查出的是更新后的数据)

多线程并发问题

利用对象操作

乐观锁悲观锁

利用SQL操作

SQL对数据进行更新的时候加上where条件判断影响行数(SQL在update的时候会给该条数据加上行级锁)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值