事务传播:REQUIRED;
事务都是使用spring的声明式事务。
在项目中,要对一张表先进行查找,如果相同uri的数据存在就更新改数据,如果不存在就添加一条记录。
查操作
if(==1)
{update}
else
{add}
很简单的一个需求,当在高并发的情况下(写了一个线程池,6个核心线程、最大10个),相同uri就会出现多条记录。
可能哥们会说没同步,最初为了性能我使用的lock,发现不行,后来干脆使用synchronized将整个操作(查、添加、更新)都同步到一个方法中,发现还是不行。
断点跟踪(空表),发现在多余6个线程并发的情况下,第一个个线程在执行同uri查操作记录为0,ADD后,
第二个线程查操作记录还是为0........这就是问题的根源,按理来说应该为1.
我想:大概是hibernate自己管理hql没有同步到数据库,于是使用session.flush(),发现不行。
难道还没有同步:于是session.flush();再session.clear();结果还是悲剧!
在此我只能出绝招了:
session.setAutoCommit(false);
add()
session.commit();
session.setAutoCommit(true);
这样倒是可以。但是感觉很别扭。
不过长时间操作,会出错!这个是关键。有时hibernate在同步session会报异常。
于是我有想:
Connection conn = session.getConnection();
PreparedStatement ps = conn.PreparedStatement(sql);
ps.executeUpdate();
conn.commit();
session.flush();(安全起见,不过好像提交了就没必要了哈!)
ps.close;
conn.close;
这样到也可以,但是感觉还是别扭!不大对劲。
希望大侠们指点迷津啊,框架的东西没怎么看,不大懂啊!
在项目中大并发的情况下,有张表老是报死锁,发现对这张表同时有hql、sql操作。
偶然把sql改成hql居然没发现死锁了(可能也是偶然);
这个问题大家也给点意见。
头痛啊。。。。。。。。。。。书到用时方恨少啊!!
分享到:
相关推荐
3. **Transaction**:处理数据库事务,提供了开始、提交、回滚等操作,确保数据的一致性。 4. **Entity**:实体类是数据库表的映射,通过`@Entity`注解标记,其属性对应表字段,通过`@Id`定义主键。 5. **Query**...
7. **事务处理**:Hibernate支持JTA(Java Transaction API)和JDBC事务,提供了事务的开始、提交、回滚等操作,确保数据的一致性和完整性。 8. **级联操作**:在映射文件中,可以配置实体属性的级联行为,如保存、...
4. 事务管理:了解Hibernate的事务处理策略,包括自动提交、显式事务控制等。 总结: "hibernate-release-4.2.13.Final.tgz"是一个全面的Hibernate学习资源,不仅提供了运行环境所需的jar包,还包含了丰富的实践...
关闭Session时,会提交事务并释放资源。 3. 查询方式:利用Query或Criteria API进行查询,或者直接使用HQL。HQL语句接近SQL,但面向对象,更易于理解和编写。 4. 数据持久化:通过Session的save()、update()、...
本篇文章主要关注如何通过Hibernate的Session接口来操纵对象,实现数据的持久化。 首先,我们需要理解Session在Hibernate中的角色。Session是Hibernate的核心接口之一,它负责对象的持久化操作,比如保存、更新、...
本文详细介绍了 Hibernate 5.0.7.Final 版本的相关知识点,包括下载与安装过程、新特性与改进、使用案例以及常见问题解答等内容。希望这些内容能够帮助开发者更好地理解和使用 Hibernate,从而构建出高效稳定的 Java...
5. 提交/回滚事务:完成所有操作后,提交事务;如有异常,回滚事务。 6. 关闭Session和SessionFactory:确保资源释放。 七、其他特性 - 缓存机制:一级缓存(Session级别的缓存)和二级缓存(SessionFactory级别的...
### Hibernate的核心接口——Session详解 #### 一、Session简述 **1. Session概念** - **定义**: Session 是 Hibernate 框架中最常用的接口之一,它又被称为持久化管理器。Session 负责所有与数据库交互的工作,...
5. 事务处理:在Session中开启和提交事务,保证数据操作的原子性。 总结,Hibernate 4.2.3作为一款强大的ORM框架,为Java开发者提供了高效、便捷的数据持久化方案。通过深入了解和熟练掌握其特性与功能,开发者可以...
一级缓存是Session级别的,所有在Session内的操作都会被缓存,直到事务提交。二级缓存则可配置为全局共享,可跨Session访问,通常由第三方缓存实现如Ehcache提供。 六、映射文件与注解 在4.2.2.Final版本中,...
记得每次操作后都要提交事务。 4. **查询**:通过Session对象,可以使用HQL或Criteria API执行查询。返回的结果可以直接转换为Java对象。 四、总结 Hibernate 3.6.8.Final是Hibernate 3系列的一个稳定版本,它以...
3. 数据库操作:创建 Session,开始事务,然后使用 Session 的 save() 方法保存 User 对象,最后提交事务。 总结,Hibernate 3.3.2 GA 是一个成熟的 ORM 解决方案,其丰富的功能和优化的性能为 Java 开发者提供了...
了解Hibernate-JPA的底层实现对于优化性能和解决复杂问题至关重要。通过阅读源码,我们可以学习到如何处理持久化过程中的各种细节,如对象的状态管理、查询解析和执行、事务控制等。例如,`EntityManager`如何创建和...
Hibernate支持一级缓存(Session级别的缓存)和二级缓存(SessionFactory级别的缓存)。一级缓存默认开启,可以减少数据库访问;二级缓存则需要配合第三方缓存框架如Ehcache,可进一步提高性能。 七、事务管理 ...
当对象被修改后,会自动更新到一级缓存,关闭Session时,未提交的改变会丢失。 2. 二级缓存:SessionFactory级别的缓存,可跨Session共享,需配合缓存插件如EhCache实现。二级缓存可以提高性能,但需谨慎使用,防止...
5. **事务管理**:Hibernate 支持编程式和声明式事务管理,通过 Transaction API 可以控制事务的开始、提交、回滚。 6. **二级缓存**:为了提高性能,Hibernate 提供了二级缓存支持,可以缓存经常访问的数据,减少...
3. **Transaction**: Hibernate的Transaction接口用于管理数据库事务,提供了开始、提交和回滚事务的方法,确保数据的一致性和完整性。 4. **Criteria API**: 提供了一种声明式查询方式,允许开发者用对象的方式...
- 事务提交后,关闭Session,释放资源。 - 对于复杂的查询,可以结合使用HQL和Criteria API,以提高代码的可读性和可维护性。 7. **持续集成与测试** - Maven作为项目管理工具,可以帮助管理依赖、构建和测试...
3. **持久化(Persistence)**: Hibernate通过`Session`接口实现对象的持久化,它可以保存、更新和删除实体对象,并将这些变化同步到数据库。 4. **查询(Querying)**: Hibernate提供HQL(Hibernate Query ...