精华帖 (0) :: 良好帖 (2) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2005-03-01
这是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 ?????郁闷中... 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2005-03-02
同一个事务中不使用JTA的话,应该不行的。
这里的mixed我觉得是在兜售它的统一的exception处理方式。 |
|
返回顶楼 | |
发表时间:2005-03-02
可以支持,请仔细检查自己的代码。
不信请仔细阅读spring相关源代码。具体哪几个类我记不太清了。反正在事务以及事务同步那几个关键类里。 |
|
返回顶楼 | |
发表时间:2005-03-02
相关的源代码我已经读过了,再我看来他是支持不了了
ConnectionHolder和PersistenceManagerHolder 之间没有任何关系,而且每次他的Connection都是从datasource里取出来,然后放在ConnectionHolder里,想要在一个事务里做,只有从PM里取得Connection然后放在ConnectionHolder里,而不是从dataSource.........不知道你那的源码是怎么说的? |
|
返回顶楼 | |
发表时间:2005-03-02
其实SessionFactory有getSession(Connection conn)方法,如果实在想的话,可以试试看从DataSourceUtil中取得的connection得到session,重新写一下SessionFactoryUtil。这些都是我的想象,概不负责。
|
|
返回顶楼 | |
发表时间:2005-03-02
嘿嘿,技术上实现是不难,就是要修改一下的他的处理方式,不过风险比较大.还有Hibernate拿到connection是比较简单,不过JDO就不同了,jdo有N种实现,拿到Connection的接口都不同,Spring即使能做到1一个事务也无法兼顾多种jdo的实现....
|
|
返回顶楼 | |
发表时间:2005-03-02
本来JTA就是为了协调事务的,不用JTA真是不好办啊。
另外我的意思是给它(Hibernate)connection,不是取它的connection。 |
|
返回顶楼 | |
发表时间: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映射 |
|
返回顶楼 | |
发表时间:2005-03-02
ASDF1982
说的不是一个问题哈 |
|
返回顶楼 | |
发表时间:2005-03-02
用AOP应该可以实现吧
|
|
返回顶楼 | |