Hibernate和JDBC混合使用

Seven-2012-7-11 发布于 2016/05/10 18:43
阅读 496
收藏 0

@蛙牛 你好,想跟你请教个问题:

Hibernate的事务控制着和JDBC同一个数据源,1 jdbc.update 2hibernate.update 

1> 1 和 2 是同一个事务吗?

2>若是同一事务,为什么在同一个事务中不可见


加载中
0
蛙牛
蛙牛

1.这个要看具体写法, 如果是两个方法要保证是 PROPAGATION_REQUIRED 加入事务 。另外两种数据访问框架要用同一个数据库连接才能保证事务,可以看下不同框架获得上下文数据库连接的方法

2.第二个问题没太看明白~ 


0
Seven-2012-7-11
Seven-2012-7-11
第二个详细说明下:用jdbc.update 数据set a=2,再用hibernate.select a 获取不到a的最新的值,用jdbc.select a 能获取最新的值,能解释下这种现象吗?感谢
0
魔力猫
魔力猫

因为无法知道你是怎么结合的,所以无法给出足够的回答。不过从后来你的回答看,Hibernate和JDBC虽然使用同一个数据源,但是明显是两个事物。你的Hibernate使用的连接和JDBC的连接不是一个。

我一般情况不建议混搭,因为很多Hibernate的特性比如缓存和JDBC未必能很好配合。绝大多数情况下,Hibernate已经可以满足OLTP系统的需要,如果不满足,那么很可能是你们设计和业务安排有问题,不是拆得不够独立,就是设计范式有问题。

0
p2ng
p2ng

最近我们用ibatis与JPA开发,出现一个事务不同步问题。

一个业务方法不能出现两套+ORM的操作,因为大家的连接,事务不是同一个...

0
魔力猫
魔力猫
你就告诉大家JDBC的数据连接是从哪里拿到的就能知道了。如果是从Hibernate当前Session拿到的,那么就是一个事务,不然就很难说了。需要更高一级的事务管理协调。
0
沧海_Sea
沧海_Sea

Hibernate我记得是可以执行原生sql的


0
Seven-2012-7-11
Seven-2012-7-11

引用来自“魔力猫”的评论

因为无法知道你是怎么结合的,所以无法给出足够的回答。不过从后来你的回答看,Hibernate和JDBC虽然使用同一个数据源,但是明显是两个事物。你的Hibernate使用的连接和JDBC的连接不是一个。

我一般情况不建议混搭,因为很多Hibernate的特性比如缓存和JDBC未必能很好配合。绝大多数情况下,Hibernate已经可以满足OLTP系统的需要,如果不满足,那么很可能是你们设计和业务安排有问题,不是拆得不够独立,就是设计范式有问题。

使用同一个数据元,但通过调试,他们在一个事务里面,只是hibernate和jdbc的修改“相互看不见”,导致无论谁获取对方的修改都是看不到的。


Hibernate+ Spring JDBC或iBatis org.springframework.orm.hibernate3.HibernateTransactionManager
摘自: http://www.iteye.com/topic/1121586 

数据源:

<bean id="dataSourceSpied" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" lazy-init="false">

hibernate 的sessionFactory

<!-- 配置sessionFactory, 注意这里引入的包的不同  --> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">  <property name="dataSource" ref="dataSource" />

两个template

<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">  <property name="dataSource" ref="dataSource" /> </bean> <bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">  <property name="sessionFactory" ref="sessionFactory" /> </bean> <!-- 配置事务管理器 --> <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">  <property name="sessionFactory">  <ref local="sessionFactory" />  </property> </bean>

我的理解既spring 能通过session的上下文管理事务,为什么相互的修改看不到??感谢


返回顶部
顶部