David.Turing's blog

 

关于在Spring中如何统一控制Hibernate和JDBC的事务的讨论记录

 Totodo(888669) 13:17:17
HB 和  JDBC 同一个事务?
水木-Spring(3330309) 13:17:40
jdbc也是有事务的.
水木-Spring(3330309) 13:17:54
hibernate只不过封装呢jdbc的事务而已
水木-Spring(3330309) 13:19:01
同一个数据源?
Water Ye(54422686) 13:19:56
同一个connection的话, 这样应该可以
t.beginTransaction();
a.method();
b.method();
t.commit();

 Totodo(888669) 13:21:14
是滴,这个比较头疼..

 Totodo(888669) 13:21:35
 我们后来是传 session,然后session.getConnection.
水木-Spring(3330309) 13:22:19
如果是session.getConnection那就是同一个connection了
xxxxxxx(12345678) 13:25:24
其实我并不知道他们是怎么搞得,我觉得应该不同connection,因为只有我用了Hibernate,其他模块都没用,怎么可能同一个connection阿,头痛!
水木-Spring(3330309) 13:24:12
这个是非常麻烦的,即使使用jta都是很麻烦,因为没有spring这样的事务配置管理,jta的事务代码需要自己写.麻烦啊
 Totodo(888669) 13:24:41
  嘻嘻,我们现在最好的业务系统模型,,基于存储过程架构的.dao只是查查数据而已..
水木-Spring(3330309) 13:24:55
这个事前没有约定一些规则.怎么会出现这种情况?
xxxxxxx(12345678) 13:28:17
ok,假如我在HB里面用他们的connection,行不行?
水木-Spring(3330309) 13:26:16
这个说的就不专业了,大侠给说说,你怎么用他们的connection?
水木-Spring(3330309) 13:26:27
让俺学习学习.
xxxxxxx(12345678) 13:29:42
我不知道,我极少涉及到事务
 Totodo(888669) 13:27:14
  SessionFactroy 用的是datasource .大哥..
水木-Spring(3330309) 13:27:18
hibernate里的connection是sessionFactory产生出来的,你能用jdbc的连接,厉害.
水木-Spring(3330309) 13:27:43
跟事务是两回事啊.
xxxxxxx(12345678) 13:30:38
就是嘛,我就是这个意思
水木-Spring(3330309) 13:28:12
如果你说,jdbc用你session里产生的connection,我还觉的说的过去.
xxxxxxx(12345678) 13:30:54
我想知道怎么解决jdbc跟hb的事物
水木-Spring(3330309) 13:28:31
两种方法
xxxxxxx(12345678) 13:31:12
这是我的代码
   Configuration config = new Configuration().configure();
   SessionFactory sf = config.buildSessionFactory();
   s = sf.openSession();
   Transaction tx = s.beginTransaction();

   Criteria cr = s.createCriteria(TSign.class);
xxxxxxx(12345678) 13:31:42
哦?你觉得在哪一边改动比较好?
水木-Spring(3330309) 13:29:27
哦?首先问你个问题,你的代码怎么和别人的代码交互的?
 Totodo(888669) 13:30:11
  好久没看到这样的代码了 
   Configuration ,Sf,Transaction 都能看到..
水木-Spring(3330309) 13:30:25
在你的代码里调用别人的代码?
水木-Spring(3330309) 13:31:07
准确的说,Configuration ,Sf这样的代码确实比较少见了.
水木-Spring(3330309) 13:31:25
如果不使用spring的话,Transaction是必不可少的.
xxxxxxx(12345678) 13:34:23
别人Call我的
水木-Spring(3330309) 13:31:59
话说回来,david.turing你这段代码本身就有问题的.
水木-Spring(3330309) 13:32:08
应该说效率很低的.
xxxxxxx(12345678) 13:34:48
这些代码是Workshop生成的 
水木-Spring(3330309) 13:33:11
恐怖的代码生成器啊
xxxxxxx(12345678) 13:36:14
帅哥,你的思路如何,让我借鉴一下
xxxxxxx(12345678) 13:36:42
我那时候没有用JDBCTemplate,真是一个事物
xxxxxxx(12345678) 13:36:48
失误
水木-Spring(3330309) 13:34:57
no,no,即使你没用spring里的jdbcTemplate你的这段代码也大有问题的,你自己上网查查看.
水木-Spring(3330309) 13:35:03
说一下你刚才的事务的问题.
xxxxxxx(12345678) 13:38:11
恩,把问题先解决
 Totodo(888669) 13:35:34
 我的原则不把在tx写代码里..

 不过代码都这样写,就没关系了..

 带着参数互相传吧..
水木-Spring(3330309) 13:36:30
我假设你的代码(hibernate)里调用别人(jdbc),那么你可以将session里产生的connection当作参数传递给jdbc的程序.当然,事务最终在你这里做统一提交.
水木-Spring(3330309) 13:36:47
但这种情况不好的地方就是需要是同一个connection
xxxxxxx(12345678) 13:40:18
如果是别人调用我的HB呢?
水木-Spring(3330309) 13:37:41
第二种方法就是使用jta,这种情况的好处是不仅连接可以不是同一个,数据源也可以不一样.
xxxxxxx(12345678) 13:40:33
jta,复杂否?
水木-Spring(3330309) 13:38:00
如果别人调用你的,你就晕吧.
水木-Spring(3330309) 13:39:14
jta?是否复杂,两方面,首先你的的应用服务器是什么?然后你时候使用spring这样的形式来管理事务.
xxxxxxx(12345678) 13:43:35
weblogic 8.1
xxxxxxx(12345678) 13:43:44
没用用Spring
getdown(9486681) 13:41:19
现在用Spring吧...
水木-Spring(3330309) 13:41:29
呵呵,晚了.
xxxxxxx(12345678) 13:44:09
晕倒
getdown(9486681) 13:41:46
不会晚
水木-Spring(3330309) 13:41:55
应用服务器一般都实现很好的jta
getdown(9486681) 13:41:59
原来事务代码还保存没有关系..
xxxxxxx(12345678) 13:44:43
帅哥们,我是不想负这个责任
netfishx(151431) 13:42:31
对,不是说换就换的啊
xxxxxxx(12345678) 13:45:16
JTA能解决跨Connection的问题?
getdown(9486681) 13:42:38
不用换啊..
getdown(9486681) 13:42:43
JTA可以..
getdown(9486681) 13:42:48
不过JTA有点限制
getdown(9486681) 13:43:15
我有碰到代码里面直接写connection.commit()...
getdown(9486681) 13:43:22
这种情况就不能用JTA了..
水木-Spring(3330309) 13:43:36
这叫什么限制啊,呵呵.
水木-Spring(3330309) 13:43:50
这是起码的规则吧
xxxxxxx(12345678) 13:47:04
我可以改代码啊
getdown(9486681) 13:44:03
呵呵 你不知道 原有存在的很多系统都是这么控制事务的..
水木-Spring(3330309) 13:44:27
全局事务,当然不允许你自己做提交了.呵呵.
xxxxxxx(12345678) 13:47:48
tx.commit();全部更换我都可以去做
getdown(9486681) 13:44:49
最简单的还是用Spring的HibernateTransactionMananger来管理Hibernate和JDBC的事务一致.
xxxxxxx(12345678) 13:48:00
恩!
xxxxxxx(12345678) 13:48:27
但他们如果不用Spring呢? 工作量大不大?
getdown(9486681) 13:45:30
...
水木-Spring(3330309) 13:45:44
他们不用,你还做什么啊?晕
xxxxxxx(12345678) 13:49:07
我要创造条件给他们去用
getdown(9486681) 13:46:15
这是可行的
 Totodo(888669) 13:46:19
  老实说,我不喜欢JTA...
xxxxxxx(12345678) 13:49:23
但是要我把HB->JDBC我死活不愿意的
xxxxxxx(12345678) 13:49:42
他们也不会JDBC->HB
水木-Spring(3330309) 13:46:45
其实david.turing,你的这个改造不是很麻烦的,至少你不是跨数据源的.
xxxxxxx(12345678) 13:49:53
恩....
水木-Spring(3330309) 13:47:09
但是改造的话,风险也不小的.
xxxxxxx(12345678) 13:50:11
答案,我等不及了
getdown(9486681) 13:47:14
那就用HibernateTransactionManager来管理吧,我试过,改动最小..
getdown(9486681) 13:47:17
风险也最小..
xxxxxxx(12345678) 13:50:29
JDBC?
getdown(9486681) 13:47:30
我刚刚在一个大项目的二次开发里面用
xxxxxxx(12345678) 13:50:36

getdown(9486681) 13:47:52
HibernateTransactionManager可以同时保证JDBC和Hibernate的事务一致..
xxxxxxx(12345678) 13:51:47
有你这句话就行了
xxxxxxx(12345678) 13:52:00
getdown,给一个配置的sample我看看如何?
getdown(9486681) 13:48:59
呵呵 这个你放心了 我很仔细的试过了..
getdown(9486681) 13:49:07
ok
xxxxxxx(12345678) 13:52:12
thx!!!
 Totodo(888669) 13:52:44
getdown(9486681) 13:44:49
最简单的还是用Spring的HibernateTransactionMananger来管理Hibernate和JDBC的事务一致. 
getdown(9486681) 13:52:53
?
 Totodo(888669) 13:53:02
 牛了..我要学习一下.
 Totodo(888669) 13:53:54
 好比Spring 我有一段这样子配的..
 Totodo(888669) 13:53:56
  <!-- Transaction manager for a single Hibernate SessionFactory (alternative to JTA) -->

 <bean id="rscTransactionControl" class="org.springframework.orm.hibernate.HibernateTransactionManager">
  <property name="sessionFactory">
   <ref local="rscSessionFactory" />
  </property>
 </bean>
 
 Totodo(888669) 13:54:40
对应的事务控制分别是..

 <bean id="txAttributes" class="org.springframework.transaction.interceptor.NameMatchTransactionAttributeSource">
  <property name="properties">
   <value>
     *=PROPAGATION_REQUIRED
     do*=PROPAGATION_REQUIRED
   < alue>
  </property>
 </bean>
 
 <bean id="txInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor">
  <property name="transactionManager">
   <ref bean="rscTransactionControl" />
  </property>
  <property name="transactionAttributeSource">
   <ref bean="txAttributes" />
  </property>
 </bean>
 Totodo(888669) 13:55:20
 HB事务控制的

 <bean id="autoProxyCreator" class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
  <property name="interceptorNames">
   <value>txInterceptor< alue>
  </property>
  <property name="beanNames">
   <list>
    <value>*DAO< alue>
    <value>*Manager< alue>
   < st>
  </property>
 </bean>
    
 Totodo(888669) 13:55:45
 而我另外用个JDBC的..
 Totodo(888669) 13:55:49
  <bean id="jdbc" class="org.springframework.jdbc.core.JdbcTemplate">
  <constructor-arg>
   <ref bean="rscDataSource" />
  </constructor-arg>
 </bean>
 Totodo(888669) 13:56:33
 JDBC 怎么被  HibernateTransactionManager, 管理上?
getdown(9486681) 13:56:44
呵呵...
getdown(9486681) 13:56:59
我发给你看看
netfishx(151431) 13:57:12
贴出来都看看嘛
getdown(9486681) 13:57:27
ok 那我就贴出来看吧..
 Totodo(888669) 13:57:28
 要看哦..
getdown(9486681) 13:57:46
前面的简单 ..先
 <bean id="baseService" lazy-init="true" abstract="true"
  class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">

  <property name="transactionManager" ref="transactionManager" />

  <property name="transactionAttributes">
   <props>
    <prop key="*">PROPAGATION_REQUIRED</prop>
   </props>
  </property>

 </bean>
getdown(9486681) 13:57:59
这个等于是总的Service的配置.
 Totodo(888669) 13:58:07
  er..
 Totodo(888669) 13:58:09
en ..
getdown(9486681) 13:58:33
然后 JDBC的..
 <bean id="userJdbcDao"
  class="com.gfa4j.demo.jdbc.impl.UserJdbcDaoImpl">
  <property name="dataSource">
   <ref bean="dataSource" />
  </property>
 </bean>
getdown(9486681) 13:59:09
然后是Service的...
 <bean id="userJdbcService" parent="baseService">
  <property name="target">
   <bean
    class="com.gfa4j.demo.jdbc.impl.UserJdbcServiceImpl">
    <property name="jdbcDao" ref="jdbcDao" />
   </bean>
  </property>
 </bean>
 Totodo(888669) 13:59:23
  OH....

getdown(9486681) 13:59:37
这个时候其实调用JDBC的时候等于用了HibernateTransactionMananger了..

 Totodo(888669) 14:00:35
这里的ref de   transcationManager  就是 HibernateTransactionMananger 么?
getdown(9486681) 14:00:39
嗯..
getdown(9486681) 14:00:44
两个用的都是..
 Totodo(888669) 14:00:49
天才啊..
getdown(9486681) 14:00:59
 <bean id="userHibernateService" parent="baseService">
  <property name="target">
   <bean
    class="com.gfa4j.demo.service.impl.UserHibernateServiceImpl">
    <property name="userJdbcService" ref="userJdbcService" />
   </bean>
  </property>
 </bean>
getdown(9486681) 14:01:07
这个是Hibernate Service
getdown(9486681) 14:01:14
这样就可以很方便的调用了..
netfishx(151431) 14:01:19
这样就可以???
getdown(9486681) 14:01:23
嗯 ...

 


 Totodo(888669) 15:29:45
 看了JdbcTemplate 的源..
 Totodo(888669) 15:29:46
 
 //-------------------------------------------------------------------------
 // Methods dealing with static SQL (java.sql.Statement)
 //-------------------------------------------------------------------------

 public Object execute(StatementCallback action) throws DataAccessException {
  Connection con = DataSourceUtils.getConnection(getDataSource());
  Statement stmt = null;
  try {
   Connection conToUse = con;
   if (this.nativeJdbcExtractor != null &&
     this.nativeJdbcExtractor.isNativeConnectionNecessaryForNativeStatements()) {
    conToUse = this.nativeJdbcExtractor.getNativeConnection(con);
   }
   stmt = conToUse.createStatement();
   DataSourceUtils.applyTransactionTimeout(stmt, getDataSource());
   Statement stmtToUse = stmt;
   if (this.nativeJdbcExtractor != null) {
    stmtToUse = this.nativeJdbcExtractor.getNativeStatement(stmt);
   }
   Object result = action.doInStatement(stmtToUse);
   SQLWarning warning = stmt.getWarnings();
   throwExceptionOnWarningIfNotIgnoringWarnings(warning);
   return result;
  }
  catch (SQLException ex) {
   throw getExceptionTranslator().translate("executing StatementCallback", getSql(action), ex);
  }
  finally {
   JdbcUtils.closeStatement(stmt);
   DataSourceUtils.closeConnectionIfNecessary(con, getDataSource());
  }
 }
 Totodo(888669) 15:31:42
 public static Connection doGetConnection(DataSource dataSource, boolean allowSynchronization)
   throws SQLException {
  Assert.notNull(dataSource, "No DataSource specified");

  ConnectionHolder conHolder = (ConnectionHolder) TransactionSynchronizationManager.getResource(dataSource);
  if (conHolder != null) {
   conHolder.requested();
   return conHolder.getConnection();
  }

  logger.debug("Opening JDBC connection");
  Connection con = dataSource.getConnection();
  if (allowSynchronization && TransactionSynchronizationManager.isSynchronizationActive()) {
   logger.debug("Registering transaction synchronization for JDBC connection");
   // Use same Connection for further JDBC actions within the transaction.
   // Thread-bound object will get removed by synchronization at transaction completion.
   conHolder = new ConnectionHolder(con);
   TransactionSynchronizationManager.bindResource(dataSource, conHolder);
   TransactionSynchronizationManager.registerSynchronization(new ConnectionSynchronization(conHolder, dataSource));
   conHolder.requested();
  }

  return con;
 }
 Totodo(888669) 15:35:37
jdbc 用的是 DataSourceTransactionManager
hb 用的是 HibernateTransactionManager
 Totodo(888669) 15:39:51
It is possible--and sometimes useful--to have coordinated transactions for both. Your JDBC transactions will be managed by the HibernateTransactionManager if you work with the same JDBC DataSource in the same transaction. That is, create the SessionFactory using Spring's SessionFactoryBean using the same DataSource that your JdbcTemplates use.

The only issue to watch, of course, is that you may be invalidating your Hibernate cache by JDBC changes. Generally I find it best to use JDBC to update only tables that don't have Hibernate mappings.
It is possible--and sometimes useful--to have coordinated transactions for both. Your JDBC transactions will be managed by the HibernateTransactionManager if you work with the same JDBC DataSource in the same transaction. That is, create the SessionFactory using Spring's SessionFactoryBean using the same DataSource that your JdbcTemplates use.

The only issue to watch, of course, is that you may be invalidating your Hibernate cache by JDBC changes. Generally I find it best to use JDBC to update only tables that don't have Hibernate mappings.
 
 Totodo(888669) 15:46:14
 貌似可以啊....奇怪...
 Totodo(888669) 15:47:36
 sorry...骚扰了大家很久....
 Totodo(888669) 15:47:42
 我还是想问下..
 Totodo(888669) 15:49:01
   <bean id="jdbc" class="org.springframework.jdbc.core.JdbcTemplate">
  <constructor-arg>
   <ref bean="rscDataSource" />
  </constructor-arg>
 </bean>
 
 <!-- Transaction manager for a single Hibernate SessionFactory (alternative to JTA) -->

 <bean id="rscTransactionControl" class="org.springframework.orm.hibernate.HibernateTransactionManager">
  <property name="sessionFactory">
   <ref local="rscSessionFactory" />
  </property>
 </bean>

 <bean id="portAssignerDAO" class="bss.resourcemanager.rscass.assport.dao.impl.PortAssignerDAOImpl">
  <property name="sessionFactory">
   <ref bean="rscSessionFactory" />
  </property>
  <property name="jdbcTemplate">
   <ref bean="jdbc" />
  </property>
 </bean>


为什么我的portAssignerDAO ,用 hb ,和jdbc 不能保证再同一个事务中呢?
 Totodo(888669) 15:49:25
getDown..

 

 


 Totodo(888669) 15:55:36
至少.我能证明 

   <bean id="jdbc" class="org.springframework.jdbc.core.JdbcTemplate">
  <constructor-arg>
   <ref bean="rscDataSource" />
  </constructor-arg>
 </bean>
 
 <!-- Transaction manager for a single Hibernate SessionFactory (alternative to JTA) -->

 <bean id="rscTransactionControl" class="org.springframework.orm.hibernate.HibernateTransactionManager">
  <property name="sessionFactory">
   <ref local="rscSessionFactory" />
  </property>
 </bean>

 <bean id="portAssignerDAO" class="bss.resourcemanager.rscass.assport.dao.impl.PortAssignerDAOImpl">
  <property name="sessionFactory">
   <ref bean="rscSessionFactory" />
  </property>
  <property name="jdbcTemplate">
   <ref bean="jdbc" />
  </property>
 </bean>

这个是肯定不在一个事务里的..
 
 Totodo(888669) 15:56:23
 portAssignerDAO.updateByJdbc(xxxxxx);
  portAssignerDAO.updateByHb(xxxxxx);
 Totodo(888669) 15:57:30
 从去年上半年开始几乎没怎么用HB了....所以关注的不多....

但是HB混用jdbctempate  记忆深刻啊...
 Totodo(888669) 15:58:32
 而且,我们系统在线运行的时候.websphere的日志 一支就是很多报 不在一个事务上,而且绑定不了。 ..
 Totodo(888669) 15:59:36
getDown...在么?
 Totodo(888669) 15:59:38
    <bean id="baseService" lazy-init="true" abstract="true"
  class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">

  <property name="transactionManager" ref="transactionManager" />

  <property name="transactionAttributes">
   <props>
    <prop key="*">PROPAGATION_REQUIRED</prop>
   </props>
  </property>

 </bean>
 
 <bean id="userJdbcDao"
  class="com.gfa4j.demo.jdbc.impl.UserJdbcDaoImpl">
  <property name="dataSource">
   <ref bean="dataSource" />
  </property>
 </bean>

 <bean id="userJdbcService" parent="baseService">
  <property name="target">
   <bean
    class="com.gfa4j.demo.jdbc.impl.UserJdbcServiceImpl">
    <property name="jdbcDao" ref="userJdbcDao" />
   </bean>
  </property>
 </bean>


   <bean id="userHibernateService" parent="baseService">
  <property name="target">
   <bean
    class="com.gfa4j.demo.service.impl.UserHibernateServiceImpl">
    <property name="userJdbcService" ref="userJdbcService" />
   </bean>
  </property>
 </bean> 
 Totodo(888669) 16:00:05
能否发个 UserJdbcDaoImpl 看一下..
 Totodo(888669) 16:03:20
  是否 UserJdbcDaoImpl 直接集成 JdbcDAOSupport?
 Totodo(888669) 16:09:00
 Er...
 Totodo(888669) 16:09:44
千古大错啊......
 Totodo(888669) 16:10:25
 我误导了一波子人......
 Totodo(888669) 16:10:40
 非常感谢 getDown 和 水母Spring
netfishx(151431) 16:11:11
 水母
无声的海浪(4485373) 16:12:28
 
getdown(9486681) 16:16:54
我是直接extends JdbcDAOSupport . 
 Totodo(888669) 16:17:12
 对,继承JdbcDAOSupport
 Totodo(888669) 16:17:18
 我明白了.
 Totodo(888669) 16:17:44
 可能就是因为 我们的直接 

   <bean id="jdbc" class="org.springframework.jdbc.core.JdbcTemplate">
  <constructor-arg>
   <ref bean="rscDataSource" />
  </constructor-arg>
 </bean>
 Totodo(888669) 16:18:06
我拿你的配置,简单配了一个,,的确保证在一个事务中.
getdown(9486681) 16:18:15
 
 Totodo(888669) 16:18:50
 难道直接 用JdbcTemplate 和 extentds JdbcDAOSupport 有差别..
无声的海浪(4485373) 16:19:54
没有差别
从外貌上看需要的参数都是datasource
 Totodo(888669) 16:20:37
  我再拿getdown 那种方式换成 我原来的试一下,结果一会儿遍知
无声的海浪(4485373) 16:21:57
那你把JdbcTemplate的参数换成JdbcTemplate
再try一下
 
 Totodo(888669) 16:22:41
 是的..我另外给dao配置了一个jdbcTempalte 属性 ,set..
水木-Spring(3330309) 16:23:17
这种方式不行?
无声的海浪(4485373) 16:23:36
和你用datasource一样吗?
无声的海浪(4485373) 16:24:26
如果一样,你原来的方式也同样可以
道理是一样的
水木-Spring(3330309) 16:25:35
刚才我就说了,getdown用的那个extends是一种方式,如果不想继承的话,可以注入嘛?
水木-Spring(3330309) 16:26:22
这种注入是没有问题的.
水木-Spring(3330309) 16:26:36
和继承是一样可行的.
无声的海浪(4485373) 16:26:45

 Totodo(888669) 16:26:55
  这个知道的拉..其实,我一开始的配置,和getDown没有本质差别...
无声的海浪(4485373) 16:27:09
刚才我说的就是水母的意思
水木-Spring(3330309) 16:27:25
总之,这两种方法都是可以的.
水木-Spring(3330309) 16:27:46
有的人不喜欢继承,觉得是强耦合,那么可以选择注入.
getdown(9486681) 16:27:49
 Totodo  getdown 中间不要加大写 写成getDown难看....
 Totodo(888669) 16:27:52
 一种已经被证实有问题了..

 另外一种还没有被证实..
 Totodo(888669) 16:28:05
 正在证实中..
水木-Spring(3330309) 16:28:31
那种有问题?
无声的海浪(4485373) 16:28:48
... ...是不是你的写法有问题呢?
水木-Spring(3330309) 16:28:51
继承还是注入?
 Totodo(888669) 16:29:11
 我的这种方式.. 注入.

  <bean id="jdbc" class="org.springframework.jdbc.core.JdbcTemplate">
   <constructor-arg>
    <ref bean="rscDataSource" />
   </constructor-arg>
  </bean>
  
 <!-- Transaction manager for a single Hibernate SessionFactory (alternative to JTA) -->

 <bean id="rscTransactionControl" class="org.springframework.orm.hibernate.HibernateTransactionManager">
  <property name="sessionFactory">
   <ref local="rscSessionFactory" />
  </property>
 </bean>

 <bean id="portAssignerDAO" class="bss.resourcemanager.rscass.assport.dao.impl.PortAssignerDAOImpl">
  <property name="sessionFactory">
   <ref bean="rscSessionFactory" />
  </property>
  <property name="jdbcTemplate">
   <ref bean="jdbc" />
  </property>
 </bean>
 Totodo(888669) 16:29:46
 portAssignerDAO 是 extends HibernateDAOSupport 的..
 Totodo(888669) 16:30:39
  同时使用jdbc 和 saveOrUpdate就有问题呢...
水木-Spring(3330309) 16:31:06
你试试同时注入jdbcTemplate和HiberanteTemplate试试.
 Totodo(888669) 16:31:34
 先不玩了..晚上拿demo发给大家一起看一下,如果有兴趣的话...

 反正现在对hb不感冒是了..
水木-Spring(3330309) 16:31:45
呵呵
 Totodo(888669) 16:31:48
 要忙了,,失陪一会儿.
无声的海浪(4485373) 16:32:07

posted on 2006-08-10 18:03 david.turing 阅读(4099) 评论(0)  编辑  收藏


只有注册用户登录后才能发表评论。


网站导航:
 

导航

统计

常用链接

留言簿(110)

我参与的团队

随笔分类(126)

随笔档案(155)

文章分类(9)

文章档案(19)

相册

搜索

积分与排名

最新随笔

最新评论

阅读排行榜

评论排行榜