精华帖 (1) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2005-12-05
tomcat 5.0+ spring + hibernate 配置文件: <bean id="transactionManager" class="org.springframework.orm.hibernate.HibernateTransactionManager"> <property name="sessionFactory"> <ref local="sessionFactory"/> </property> </bean> <bean id="baseTxProxy" lazy-init="true" abstract="true" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"> <property name="transactionManager"> <ref local="transactionManager"/> </property> <property name="transactionAttributes"> <props> <prop key="*">PROPAGATION_REQUIRED</prop> </props> </property> </bean> <bean id="cmdFuncDAO" class="com.syrj.dao.impl.CmdFuncDAOImpl" autowire="byName"> <property name="persistentClass"><value>com.syrj.po.CmdFunc</value></property> </bean> <bean id="cmdItemDAO" class="com.syrj.dao.impl.CmdItemDAOImpl" autowire="byName"> <property name="persistentClass"><value>com.syrj.po.CmdItem</value></property> </bean> <bean id="cmdFuncService" parent="baseTxProxy"> <property name="target"> <bean class="com.syrj.service.impl.CmdFuncServiceImpl" autowire="byName" /> </property> </bean> public void deleteCmdFunc(String[] ids) throws HibernateException { for(int i = 0; i < ids.length; i++ ) { cmdFunc = (CmdFunc)cmdFuncDAO.getObjectById(Long.valueOf(ids[i])); cmdItemDAO.delCmdFuncId(cmdFunc); cmdFuncDAO.deleteObjectById(Long.valueOf(ids[i])); } } 错误提示信息: cmdFuncDAO出错后, cmdItemDAO的操作没有回滚! 你的分析: 都是同一数据源! 请问该怎么配置呀? 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2005-12-05
dwygp 写道 错误提示信息:
cmdFuncDAO出错后, cmdItemDAO的操作没有回滚! 你的分析: 都是同一数据源! 请问该怎么配置呀? 数据库是什么,不支持事务的mysql normal table? |
|
返回顶楼 | |
发表时间:2005-12-05
数据库是: mysql v 4.1.14-standard
|
|
返回顶楼 | |
发表时间:2005-12-05
dhj1 写道 看这贴: "SERVICE层不能相互调用"
http://www.hibernate.org.cn/viewtopic.php?t=16460 所导致的原因应该是相同的. 不过有人用屁股想想都是可以的,而且你的是同数据源,更应该可以,你为什么不可以?! 不知道该怎么配置了... |
|
返回顶楼 | |
发表时间:2005-12-05
Readonly 写道 dwygp 写道 错误提示信息:
cmdFuncDAO出错后, cmdItemDAO的操作没有回滚! 你的分析: 都是同一数据源! 请问该怎么配置呀? 数据库是什么,不支持事务的mysql normal table? 数据库是mysql 4.1.14-standard 怎么知道它支持不支持事务呀? |
|
返回顶楼 | |
发表时间:2005-12-05
dwygp 写道 数据库是mysql 4.1.14-standard 怎么知道它支持不支持事务呀? 去查mysql的文档啊,从4.0开始mysql用InnoDB作为默认的table type,是支持事务的,除非你设置了skip-innodb,用mysql提供的工具检查一下对应的table type,看看是什么类型就知道了。 |
|
返回顶楼 | |
发表时间:2005-12-05
Readonly 写道 dwygp 写道 数据库是mysql 4.1.14-standard 怎么知道它支持不支持事务呀? 去查mysql的文档啊,从4.0开始mysql用InnoDB作为默认的table type,是支持事务的,除非你设置了skip-innodb,用mysql提供的工具检查一下对应的table type,看看是什么类型就知道了。 类型都用的是InnoDB. |
|
返回顶楼 | |
发表时间:2005-12-05
dhj1 写道 你问一下那个自称用屁股想问题的人.
也许他知道答案. 当然也可能是他在吹牛! 如果不是瞎吹牛,你的问题就有解了! 不过凶多吉少呀! 你把你的MYSQL表改为InnoDB类型,试一下看看行不行,然后告诉我结果,谢谢! 不过我认为成功的可能性还是很小,可能要手工管理Session才行! 一直用的都是InnoDB 类型呀. |
|
返回顶楼 | |
发表时间:2005-12-05
dwygp 写道 一直用的都是InnoDB 类型呀.
那么肯定是你其他地方配置错了,贴上完整的配置文件,代码,和出错信息看看 |
|
返回顶楼 | |
发表时间:2005-12-05
Readonly 写道 dwygp 写道 一直用的都是InnoDB 类型呀.
那么肯定是你其他地方配置错了,贴上完整的配置文件,代码,和出错信息看看 ## MySQL hibernate.dialect net.sf.hibernate.dialect.MySQLDialect hibernate.connection.driver_class com.mysql.jdbc.Driver hibernate.connection.url jdbc:mysql://132.132.100.53:3306/db_vpn?useUnicode=true&EncodingCharacter=GBK&autoReconnect=true hibernate.connection.username usr_admin hibernate.connection.password usr_password ########################### ### C3P0 Connection Pool### ########################### hibernate.c3p0.max_size 20 hibernate.c3p0.min_size 3 hibernate.c3p0.timeout 1800 hibernate.c3p0.max_statements 100 ################################# ### Plugin ConnectionProvider ### ################################# hibernate.connection.provider_class net.sf.hibernate.connection.C3P0ConnectionProvider ####################### ### Transaction API ### ####################### hibernate.transaction.factory_class net.sf.hibernate.transaction.JDBCTransactionFactory applicationContext.xml <bean id="sessionFactory" class="org.springframework.orm.hibernate.LocalSessionFactoryBean"> <property name="mappingResources"> <list> <value>${po.dir}/CmdFunc.hbm.xml</value> <value>${po.dir}/CmdItem.hbm.xml</value> </list> </property> </bean> <bean id="transactionManager" class="org.springframework.orm.hibernate.HibernateTransactionManager"> <property name="sessionFactory"> <ref local="sessionFactory"/> </property> </bean> <bean id="baseTxProxy" lazy-init="true" abstract="true" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"> <property name="transactionManager"> <ref local="transactionManager"/> </property> <property name="transactionAttributes"> <props> <prop key="*">PROPAGATION_REQUIRED</prop> </props> </property> </bean> <bean id="cmdFuncDAO" class="com.syrj.dao.impl.CmdFuncDAOImpl" autowire="byName"> <property name="persistentClass"><value>com.syrj.po.CmdFunc</value></property> </bean> <bean id="cmdItemDAO" class="com.syrj.dao.impl.CmdItemDAOImpl" autowire="byName"> <property name="persistentClass"><value>com.syrj.po.CmdItem</value></property> </bean> <bean id="cmdFuncService" parent="baseTxProxy"> <property name="target"> <bean class="com.syrj.service.impl.CmdFuncServiceImpl" autowire="byName" /> </property> </bean> <bean id="cmdItemService" parent="baseTxProxy"> <property name="target"> <bean class="com.syrj.service.impl.CmdItemServiceImpl" autowire="byName" /> </property> </bean> CmdFuncServiceImpl.java ... public void deleteCmdFunc(String[] ids) throws HibernateException { for(int i = 0; i < ids.length; i++ ) { cmdFunc = (CmdFunc)cmdFuncDAO.getObjectById(Long.valueOf(ids[i])); cmdItemDAO.delCmdFuncId(cmdFunc); cmdFuncDAO.deleteObjectById(Long.valueOf(ids[i])); if(i==3){ throw new HibernateException("测试异常事务处理"); } } } ... |
|
返回顶楼 | |