准备环境:
表:demo_lock
CREATE TABLE `demo_lock` (
`id` int(12) NOT NULL AUTO_INCREMENT,
`aversion` int(12) NOT NULL DEFAULT '0',
`avalue` int(12) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of demo_lock
-- ----------------------------
INSERT INTO `demo_lock` VALUES ('1', '0', '0');
`id` int(12) NOT NULL AUTO_INCREMENT,
`aversion` int(12) NOT NULL DEFAULT '0',
`avalue` int(12) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of demo_lock
-- ----------------------------
INSERT INTO `demo_lock` VALUES ('1', '0', '0');
映射类:
import java.io.Serializable; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.Table; import javax.persistence.Version; import org.hibernate.annotations.GenericGenerator; /** * hibernate 乐观锁测试 * */ @Entity @Table(name = "demo_lock") public class DemoLock implements Serializable { /** * */ private static final long serialVersionUID = -8908901013537360047L; @GenericGenerator(name = "generator", strategy = "increment") @GeneratedValue(generator = "generator") @Id @Column(name = "id", unique = true, nullable = false) private Integer id; /** * 版本号 */ @Version @Column(name = "aversion" ) private int aversion; /** * */ @Column(name = "avalue" ) private int avalue; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public int getAversion() { return aversion; } public void setAversion(int aversion) { this.aversion = aversion; } public int getAvalue() { return avalue; } public void setAvalue(int avalue) { this.avalue = avalue; } }
DAO:
@Repository @Scope("prototype") public class DemoLockDaoImpl extends BaseDAOImpl implements DemoLockDao { }
Service:
import java.sql.SQLException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Service; import com.gxkj.web.jiancai.daos.DemoLockDao; import com.gxkj.web.jiancai.entitys.DemoLock; import com.gxkj.web.jiancai.services.DemoLockService; @Service @Scope("prototype") public class DemoLockServiceImpl implements DemoLockService { @Autowired private DemoLockDao demoLockDao; public DemoLock getDemoLockById(int id) throws SQLException { return (DemoLock) demoLockDao.selectById(id, DemoLock.class); } public void updateDemoLock(DemoLock entity) throws SQLException { demoLockDao.update(entity); } }
注意事项:修改时version是必填参数。
相关推荐
Hibernate乐观锁和悲观锁分析,针对在使用HIBERNATE时怎么配置乐观锁进行了详细的范例讲解
其中通过 version 实现的乐观锁机制是 Hibernate 官方推荐的乐观锁实现,同时也是 Hibernate 中,目前唯一在数据对象脱离 Session 发生修改的情况下依然有效的锁机制。因此,一般情况下,我们都选择 version 方式...
Hibernate的乐观锁与悲观锁的文档,帮助学习Hibernate的乐观锁与悲观锁,让你们学得更轻松。
学习hibernate的必备知识,当你学习hibernate时,就会对锁的概念有一定的了解了.
NULL 博文链接:https://12345678.iteye.com/blog/721836
hibernate的乐观锁和悲观锁,两种锁搞定一切
乐观锁 求助编辑百科名片相对悲观锁而言,乐观锁机制采取了更加宽松的加锁机制。悲观锁大多数情况下依靠数据库的锁机制实现,以保证操作最大程度的独占性。但随之而来的就是数据库 性能的大量开销,特别是对长事务而...
NULL 博文链接:https://tgwall163.iteye.com/blog/1291892
很好的描述Hibernate的悲观锁和乐观锁,
Hibernate高级特性,悲观锁与乐观锁的应用和区别,及两者之间的区别。
Hibernate锁机制_悲观锁和乐观锁
NULL 博文链接:https://cdxs2.iteye.com/blog/1938245
乐观锁version 对于在Hibernate中的乐观锁和悲观锁的学习
主要介绍了Hibernate实现悲观锁和乐观锁的有关内容,涉及hibernate的隔离机制,以及实现悲观锁和乐观锁的代码实现,需要的朋友可以了解下。
spring-Hibernate整合代码测试过程
hibernate框架测试小例子,可用来学习如何使用hibernate框架.
主要介绍了Hibernate悲观锁和乐观锁实例详解,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
对于hibernate的初学者有很好的用处
hibernate的简单映射和数据库连接池proxool的Java测试和hibernate和proxool的整合