`
zmty123
  • 浏览: 8172 次
  • 性别: Icon_minigender_1
  • 来自: 成都
文章分类
社区版块
存档分类
最新评论

hibernate-session提交的问题

阅读更多

事务传播: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居然没发现死锁了(可能也是偶然);

这个问题大家也给点意见。

头痛啊。。。。。。。。。。。书到用时方恨少啊!!

 

 

 

 

分享到:
评论
1 楼 zmty123 2011-06-07  
大家给点意见或建议撒!

相关推荐

    hibernate-core-5.0.11.Final.jar

    3. **Transaction**:处理数据库事务,提供了开始、提交、回滚等操作,确保数据的一致性。 4. **Entity**:实体类是数据库表的映射,通过`@Entity`注解标记,其属性对应表字段,通过`@Id`定义主键。 5. **Query**...

    hibernate-core 核心jar包

    7. **事务处理**:Hibernate支持JTA(Java Transaction API)和JDBC事务,提供了事务的开始、提交、回滚等操作,确保数据的一致性和完整性。 8. **级联操作**:在映射文件中,可以配置实体属性的级联行为,如保存、...

    最新 hibernate-release-4.2.13.Final.tgz

    4. 事务管理:了解Hibernate的事务处理策略,包括自动提交、显式事务控制等。 总结: "hibernate-release-4.2.13.Final.tgz"是一个全面的Hibernate学习资源,不仅提供了运行环境所需的jar包,还包含了丰富的实践...

    hibernate-release-5.0.11.Final

    关闭Session时,会提交事务并释放资源。 3. 查询方式:利用Query或Criteria API进行查询,或者直接使用HQL。HQL语句接近SQL,但面向对象,更易于理解和编写。 4. 数据持久化:通过Session的save()、update()、...

    hibernate--3.Hibernate数据持久化(通过 Session 操纵对象)

    本篇文章主要关注如何通过Hibernate的Session接口来操纵对象,实现数据的持久化。 首先,我们需要理解Session在Hibernate中的角色。Session是Hibernate的核心接口之一,它负责对象的持久化操作,比如保存、更新、...

    hibernate-release-5.0.7.Final.zip官方

    本文详细介绍了 Hibernate 5.0.7.Final 版本的相关知识点,包括下载与安装过程、新特性与改进、使用案例以及常见问题解答等内容。希望这些内容能够帮助开发者更好地理解和使用 Hibernate,从而构建出高效稳定的 Java...

    hibernate-distribution-3.6.10.Final基本包

    5. 提交/回滚事务:完成所有操作后,提交事务;如有异常,回滚事务。 6. 关闭Session和SessionFactory:确保资源释放。 七、其他特性 - 缓存机制:一级缓存(Session级别的缓存)和二级缓存(SessionFactory级别的...

    hibernate的核心接口--Session

    ### Hibernate的核心接口——Session详解 #### 一、Session简述 **1. Session概念** - **定义**: Session 是 Hibernate 框架中最常用的接口之一,它又被称为持久化管理器。Session 负责所有与数据库交互的工作,...

    hibernate-release-4.2.3

    5. 事务处理:在Session中开启和提交事务,保证数据操作的原子性。 总结,Hibernate 4.2.3作为一款强大的ORM框架,为Java开发者提供了高效、便捷的数据持久化方案。通过深入了解和熟练掌握其特性与功能,开发者可以...

    hibernate-release-4.2.2.Final.zip

    一级缓存是Session级别的,所有在Session内的操作都会被缓存,直到事务提交。二级缓存则可配置为全局共享,可跨Session访问,通常由第三方缓存实现如Ehcache提供。 六、映射文件与注解 在4.2.2.Final版本中,...

    hibernate-distribution-3.6.8.Final-dist

    记得每次操作后都要提交事务。 4. **查询**:通过Session对象,可以使用HQL或Criteria API执行查询。返回的结果可以直接转换为Java对象。 四、总结 Hibernate 3.6.8.Final是Hibernate 3系列的一个稳定版本,它以...

    hibernate-distribution-3.3.2.GA-dist.zip

    3. 数据库操作:创建 Session,开始事务,然后使用 Session 的 save() 方法保存 User 对象,最后提交事务。 总结,Hibernate 3.3.2 GA 是一个成熟的 ORM 解决方案,其丰富的功能和优化的性能为 Java 开发者提供了...

    hibernate-jpa学习

    了解Hibernate-JPA的底层实现对于优化性能和解决复杂问题至关重要。通过阅读源码,我们可以学习到如何处理持久化过程中的各种细节,如对象的状态管理、查询解析和执行、事务控制等。例如,`EntityManager`如何创建和...

    hibernate-release-5.1.16.Final.zip

    Hibernate支持一级缓存(Session级别的缓存)和二级缓存(SessionFactory级别的缓存)。一级缓存默认开启,可以减少数据库访问;二级缓存则需要配合第三方缓存框架如Ehcache,可进一步提高性能。 七、事务管理 ...

    hibernate-orm-4.3.9源码

    当对象被修改后,会自动更新到一级缓存,关闭Session时,未提交的改变会丢失。 2. 二级缓存:SessionFactory级别的缓存,可跨Session共享,需配合缓存插件如EhCache实现。二级缓存可以提高性能,但需谨慎使用,防止...

    Hibernate--jar包

    5. **事务管理**:Hibernate 支持编程式和声明式事务管理,通过 Transaction API 可以控制事务的开始、提交、回滚。 6. **二级缓存**:为了提高性能,Hibernate 提供了二级缓存支持,可以缓存经常访问的数据,减少...

    hibernate-api-3.1.1.rar

    3. **Transaction**: Hibernate的Transaction接口用于管理数据库事务,提供了开始、提交和回滚事务的方法,确保数据的一致性和完整性。 4. **Criteria API**: 提供了一种声明式查询方式,允许开发者用对象的方式...

    Hibernate-Sqlite

    - 事务提交后,关闭Session,释放资源。 - 对于复杂的查询,可以结合使用HQL和Criteria API,以提高代码的可读性和可维护性。 7. **持续集成与测试** - Maven作为项目管理工具,可以帮助管理依赖、构建和测试...

    hibernate最新版jar包(全)

    3. **持久化(Persistence)**: Hibernate通过`Session`接口实现对象的持久化,它可以保存、更新和删除实体对象,并将这些变化同步到数据库。 4. **查询(Querying)**: Hibernate提供HQL(Hibernate Query ...

Global site tag (gtag.js) - Google Analytics