案例原型:对同一商品的库存修改工作
<1>不能通过先查再去修改的方案,通过原生sql进行操作
<2>使用触发器
<3>使用hibernate悲观锁,在查询商品的时候即加锁
<4>使用hibernate乐观锁:在实体类添加version进行版本控制,如果事务操作失败,可提示用户,由用户去决定解决方案;
也可以捕获异常,进行重试机制.具体根据实际的业务需求
案例原型:生成交易单时,交易单号的生成,(查询最大值加1)
<1>同上
<2>同上
<3>使用hibernate悲观锁:
新增一个表temp,存取当前订单号的最大值,每次新增交易单的时候,去temp表去查询,temp表的这条数据进行加锁,不允许任何其他事物
再操作temp.插入交易单后,再去修改temp表中的最大值.为了保证长事物由于锁对性能的影响,尽量在事务方法的末尾去temp表查询和
修改操作
总结:对读操作比较高的,建议使用乐观锁;
对写操作和数据安全比较高的,建议使用悲观锁