论坛首页 Java企业应用论坛

Spring真的能mixed JDBC和ORM?

浏览 25403 次
精华帖 (0) :: 良好帖 (2) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2005-03-01  
---mixed ORM and JDBC usage is a feature of Spring DAO

这是Rod Johnson在Spring官方上说的....以前我的理解是可以在同一个事务里
混合JDBC和ORM 编程(不考虑JTA).但我发现我错了..

比如有这样一个业务方法

void doBusiness(){
  doAction1(); 使用JdbcTemplete
  doAction2(); 使用JdoDaoSupport或HBDaoSupport
}

但这样缺是行不通的,Spring只是能拿到HB和JDBC的同一个数据源(DataSource),却拿不到Hibernate和Jdbc的同一个底层Connection的连接
导致这2个方法将分别完成,并不能处在同一个事务,而且我运行的后还出现连接未释放的情况.(他们单独拿出来当然是正确的)...

难道rod的话的意思只是可以在不同的方法里,使jdbc和ORM拿到同一个数据源,mixed JDBC and ORM ?????郁闷中...
   发表时间:2005-03-02  
同一个事务中不使用JTA的话,应该不行的。
这里的mixed我觉得是在兜售它的统一的exception处理方式。
0 请登录后投票
   发表时间:2005-03-02  
可以支持,请仔细检查自己的代码。
不信请仔细阅读spring相关源代码。具体哪几个类我记不太清了。反正在事务以及事务同步那几个关键类里。
0 请登录后投票
   发表时间:2005-03-02  
相关的源代码我已经读过了,再我看来他是支持不了了
ConnectionHolder和PersistenceManagerHolder
之间没有任何关系,而且每次他的Connection都是从datasource里取出来,然后放在ConnectionHolder里,想要在一个事务里做,只有从PM里取得Connection然后放在ConnectionHolder里,而不是从dataSource.........不知道你那的源码是怎么说的?
0 请登录后投票
   发表时间:2005-03-02  
其实SessionFactory有getSession(Connection conn)方法,如果实在想的话,可以试试看从DataSourceUtil中取得的connection得到session,重新写一下SessionFactoryUtil。这些都是我的想象,概不负责。
0 请登录后投票
   发表时间:2005-03-02  
嘿嘿,技术上实现是不难,就是要修改一下的他的处理方式,不过风险比较大.还有Hibernate拿到connection是比较简单,不过JDO就不同了,jdo有N种实现,拿到Connection的接口都不同,Spring即使能做到1一个事务也无法兼顾多种jdo的实现....
0 请登录后投票
   发表时间:2005-03-02  
本来JTA就是为了协调事务的,不用JTA真是不好办啊。

另外我的意思是给它(Hibernate)connection,不是取它的connection。
0 请登录后投票
   发表时间:2005-03-02  
final List userList = new ArrayList();
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
jdbcTemplate
.query(
"SELECT name, sex, address FROM user WHERE age > 18",
new RowCallbackHandler() {
public void processRow(ResultSet rs) throws SQLException {
User user = new User();
user.setId(rs.getString("name"));
user.setSex(rs.getString("sex"));
user.setAddress(rs.getString("address"));
userList.add(product);
}
}
);
这里传入query方法的有两个参数,第一个是Select查询语句,第二个是一个
RowCallbackHandler实例,我们通过RowCallbackHandler对Select语句得到的每行记
录进行解析,并为其创建一个User数据对象。实现了手动的OR映射
0 请登录后投票
   发表时间:2005-03-02  
ASDF1982
说的不是一个问题哈
0 请登录后投票
   发表时间:2005-03-02  
用AOP应该可以实现吧
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics