1. 如何支持this.sessionFactory.getCurrentSession()
在SessionFactory 的配置中
<property name="hibernateProperties">
<props>
<prop key="hibernate.current_session_context_class">
thred
</prop>
<prop key="hibernate.transaction.factory_class">
org.hibernate.transaction.JDBCTransactionFactory
</prop>
</props>
</property>
添加此配置后,必须在code中使用transaction
public List<LogEntry> getAll(){
Transaction transaction=this.sessionFactory.getCurrentSession().beginTransaction();
try{
return this.sessionFactory.getCurrentSession().createQuery("from LogEntry").list();
}finally{
transaction.commit();
}
}
public List<LogEntry> getByName(String name){
Transaction transaction=this.sessionFactory.getCurrentSession().beginTransaction();
try{
return this.sessionFactory.getCurrentSession().createQuery("from LogEntry where name=:name").setParameter
("name",name).uniqueResult();
}finally{
transaction.commit();
}
}
2. 线程A 和 B 各从数据库中加载同一行数据,线程A先更新数据,保存,然后线程B更新数据,这时就会有脏数据产生.
悲观锁: 线程A可以整行加锁,从而使得只有A更新完数据,B才能从数据库中加载数据,此方法为悲观锁
乐观锁: 如果执行的读操作比写操作多,最好将行释放,使用乐观锁.
3. hibernate中乐观锁的实现:
在数据库表中增加一列 : version, default value : null , long
在HIBERNATE的*.hbm.xml文件中
................
<version name="version" column="version" unsave-value="null" type="long"
<property name="name" column="name" not-null="true"/>
...............
每做一次更新,version 会自动加1, 这样当线程A更新完后, version=version+1, 线程再更新时 version 会不同,会有异常抛出
4. 可以通过比较对象ID和 VERSION同时相等,来确认内存中的两个对象相等。
分享到:
相关推荐
Hibernate乐观锁和悲观锁分析,针对在使用HIBERNATE时怎么配置乐观锁进行了详细的范例讲解
其中通过 version 实现的乐观锁机制是 Hibernate 官方推荐的乐观锁实现,同时也是 Hibernate 中,目前唯一在数据对象脱离 Session 发生修改的情况下依然有效的锁机制。因此,一般情况下,我们都选择 version 方式...
Hibernate 中有两种锁机制:悲观锁和乐观锁。 一、悲观锁(Pessimistic Locking) 悲观锁是一种预防并发访问的机制,Hibernate 通过对数据库的锁定来实现。悲观锁假定任何时刻存取数据时,都可能有另一个客户也...
hibernate的乐观锁和悲观锁,两种锁搞定一切
NULL 博文链接:https://12345678.iteye.com/blog/721836
Hibernate的乐观锁与悲观锁的文档,帮助学习Hibernate的乐观锁与悲观锁,让你们学得更轻松。
学习hibernate的必备知识,当你学习hibernate时,就会对锁的概念有一定的了解了.
很好的描述Hibernate的悲观锁和乐观锁,
Hibernate高级特性,悲观锁与乐观锁的应用和区别,及两者之间的区别。
NULL 博文链接:https://tgwall163.iteye.com/blog/1291892
Hibernate 中 Criteria 的完整用法 Hibernate 的 Criteria 是一种强大且灵活的查询机制,允许开发者根据需求灵活地组装查询条件。Criteria 的设计是基于 CriteriaSpecification 父接口,提供了 Criteria 和 ...
乐观锁 求助编辑百科名片相对悲观锁而言,乐观锁机制采取了更加宽松的加锁机制。悲观锁大多数情况下依靠数据库的锁机制实现,以保证操作最大程度的独占性。但随之而来的就是数据库 性能的大量开销,特别是对长事务而...
NULL 博文链接:https://cdxs2.iteye.com/blog/1938245
该资源主要是分析:乐观锁解决事务并发.乐观锁校验测试, 基于hiber管理的悲观锁实现
hibernate利用锁的相关功能详解,分为乐观锁和悲观锁。希望各位喜欢。
主要介绍了Hibernate悲观锁和乐观锁实例详解,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
001 Hibernate 简介(开源 O/R 映射框架) 002 第一个 Hibernate ...025 hibernate 悲观锁、乐观锁 026 hibernate 操作树形结构 027 hibernate 查询语言(HQL) 028 hibernate 缓存(性能优化策略) 029 hibernate 抓取策略
Hibernate 简介 Hibernate 开发流程 Hibernate 配置文件 Hibernate 核心接口和类 Hibernate ORM映射 HQL Hibernate 懒加载机制与抓取策略 Hibernate 缓存 Hibernate 锁机制
主要介绍了Hibernate实现悲观锁和乐观锁的有关内容,涉及hibernate的隔离机制,以及实现悲观锁和乐观锁的代码实现,需要的朋友可以了解下。