案例原型:对同一商品的库存修改工作

<1>不能通过先查再去修改的方案,通过原生sql进行操作

<2>使用触发器

<3>使用hibernate悲观锁,在查询商品的时候即加锁

<4>使用hibernate乐观锁:在实体类添加version进行版本控制,如果事务操作失败,可提示用户,由用户去决定解决方案;

也可以捕获异常,进行重试机制.具体根据实际的业务需求

案例原型:生成交易单时,交易单号的生成,(查询最大值加1)

<1>同上

<2>同上

<3>使用hibernate悲观锁:

新增一个表temp,存取当前订单号的最大值,每次新增交易单的时候,去temp表去查询,temp表的这条数据进行加锁,不允许任何其他事物

再操作temp.插入交易单后,再去修改temp表中的最大值.为了保证长事物由于锁对性能的影响,尽量在事务方法的末尾去temp表查询和

修改操作

总结:对读操作比较高的,建议使用乐观锁;

       对写操作和数据安全比较高的,建议使用悲观锁