精华帖 (1) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2005-12-05
to: "dwygp"
1、首先你确定了你的mysql中数据库中要操作的表的Engine为:InnoDB Row_format为:Dynamic 2、从你的的代码中我没看到你为你的serviceImpl注入要管理事务的DAO,不知是不是没有帖出来。 <bean id="cmdFuncService" parent="baseTxProxy"> <property name="target"> <bean class="com.syrj.service.impl.CmdFuncServiceImpl" autowire="byName" /> </property> </bean> 写成这样: <bean id="cmdFuncService" parent="baseTxProxy"> <property name="target"> <bean class="com.syrj.service.impl.CmdFuncServiceImpl" autowire="byName" > <property name="cmdItemDAO"><ref local="cmdItemDAO"/></property> <property name="cmdFuncDAO"><ref local="cmdFuncDAO"/></property> <bean> </property> </bean> 3、如果排除是数据库的问题后,建议你先用代码做事务声明。如下例子: DefaultTransactionDefinition def = new DefaultTransactionDefinition(); def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);; TransactionStatus status = transactionManager.getTransactionDefinition(def);; try { 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]););; } } catch (MyException ex); { transactionManager.rollback(status);; throw ex; } transactionManager.commit(status);; 这样可以出错可以回滚证明是配置的问题。最后建议所出错信息帖出来! good luck |
|
返回顶楼 | |
发表时间:2005-12-05
flyjie 写道 to: "dwygp"
1、首先你确定了你的mysql中数据库中要操作的表的Engine为:InnoDB Row_format为:Dynamic 2、从你的的代码中我没看到你为你的serviceImpl注入要管理事务的DAO,不知是不是没有帖出来。 <bean id="cmdFuncService" parent="baseTxProxy"> <property name="target"> <bean class="com.syrj.service.impl.CmdFuncServiceImpl" autowire="byName" /> </property> </bean> 写成这样: <bean id="cmdFuncService" parent="baseTxProxy"> <property name="target"> <bean class="com.syrj.service.impl.CmdFuncServiceImpl" autowire="byName" > <property name="cmdItemDAO"><ref local="cmdItemDAO"/></property> <property name="cmdFuncDAO"><ref local="cmdFuncDAO"/></property> <bean> </property> </bean> 3、如果排除是数据库的问题后,建议你先用代码做事务声明。如下例子: DefaultTransactionDefinition def = new DefaultTransactionDefinition(); def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);; TransactionStatus status = transactionManager.getTransactionDefinition(def);; try { 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]););; } } catch (MyException ex); { transactionManager.rollback(status);; throw ex; } transactionManager.commit(status);; 这样可以出错可以回滚证明是配置的问题。最后建议所出错信息帖出来! good luck 好,我试试... |
|
返回顶楼 | |
发表时间:2005-12-05
flyjie 写道 to: "dwygp"
1、首先你确定了你的mysql中数据库中要操作的表的Engine为:InnoDB Row_format为:Dynamic 2、从你的的代码中我没看到你为你的serviceImpl注入要管理事务的DAO,不知是不是没有帖出来。 <bean id="cmdFuncService" parent="baseTxProxy"> <property name="target"> <bean class="com.syrj.service.impl.CmdFuncServiceImpl" autowire="byName" /> </property> </bean> 写成这样: <bean id="cmdFuncService" parent="baseTxProxy"> <property name="target"> <bean class="com.syrj.service.impl.CmdFuncServiceImpl" autowire="byName" > <property name="cmdItemDAO"><ref local="cmdItemDAO"/></property> <property name="cmdFuncDAO"><ref local="cmdFuncDAO"/></property> <bean> </property> </bean> 3、如果排除是数据库的问题后,建议你先用代码做事务声明。如下例子: DefaultTransactionDefinition def = new DefaultTransactionDefinition(); def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);; TransactionStatus status = transactionManager.getTransactionDefinition(def);; try { 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]););; } } catch (MyException ex); { transactionManager.rollback(status);; throw ex; } transactionManager.commit(status);; 这样可以出错可以回滚证明是配置的问题。最后建议所出错信息帖出来! good luck 你好, 自己做事务声明可以回滚! 错误就是我throw一个异常。我现在就是要清楚在错误后要能回滚! |
|
返回顶楼 | |
发表时间:2005-12-05
dwygp 写道 你好, 自己做事务声明可以回滚! 错误就是我throw一个异常。我现在就是要清楚在错误后要能回滚! 你还是先把错误信息和配置的主要重点部分先帖出来吧! |
|
返回顶楼 | |
发表时间:2005-12-05
flyjie 写道 dwygp 写道 你好, 自己做事务声明可以回滚! 错误就是我throw一个异常。我现在就是要清楚在错误后要能回滚! 你还是先把错误信息和配置的主要重点部分先帖出来吧! ## 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.adt.service.impl.CmdFuncServiceImpl" autowire="byName" > <property name="cmdItemDAO"><ref local="cmdItemDAO"/></property> <property name="cmdFuncDAO"><ref local="cmdFuncDAO"/></property> </bean> </property> </bean> <bean id="cmdItemService" parent="baseTxProxy"> <property name="target"> <bean class="com.syrj.service.impl.CmdItemServiceImpl" autowire="byName" /> </property> </bean> Hibernate: delete from cmd_item where Id=? Hibernate: delete from cmd_func where Id=? 13:57:26,750 ERROR ExceptionCatcherInterceptor:46 - Caught exception while invok ing action: com.adt.action.cmd.DeleteCmdFunc@177ee02 net.sf.hibernate.HibernateException: java.sql.SQLException at com.adt.service.impl.CmdFuncServiceImpl.deleteCmdFunc(CmdFuncServiceI mpl.java:56); at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method); at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl. java:39); at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces sorImpl.java:25); at java.lang.reflect.Method.invoke(Method.java:324); at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflecti on(AopUtils.java:284); at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJo inpoint(ReflectiveMethodInvocation.java:155); at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed( ReflectiveMethodInvocation.java:122); at org.springframework.transaction.interceptor.TransactionInterceptor.in voke(TransactionInterceptor.java:56); at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed( ReflectiveMethodInvocation.java:144); at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynami cAopProxy.java:174); at $Proxy93.deleteCmdFunc(Unknown Source); at com.adt.action.cmd.DeleteCmdFunc.execute(DeleteCmdFunc.java:25); |
|
返回顶楼 | |
发表时间:2005-12-05
dhj1 写道 dwygp 写道 dhj1 写道 你问一下那个自称用屁股想问题的人.
也许他知道答案. 当然也可能是他在吹牛! 如果不是瞎吹牛,你的问题就有解了! 不过凶多吉少呀! 你把你的MYSQL表改为InnoDB类型,试一下看看行不行,然后告诉我结果,谢谢! 不过我认为成功的可能性还是很小,可能要手工管理Session才行! 一直用的都是InnoDB 类型呀. 程序自已管理Session,试试行不行,成功了就告诉我方法,谢谢! 你好!自己管理可以回滚呀! |
|
返回顶楼 | |
发表时间:2005-12-05
你的sessionFactory中加一句:
<property name="hibernateProperties"> <props> <prop key="hibernate.dialect">net.sf.hibernate.dialect.MySQLDialect</prop> <prop key="hibernate.show_sql">true</prop> </props> </property> 事务配置这么写: <bean id="cmdFuncDAO" class="com.syrj.dao.impl.CmdFuncDAOImpl"> <property name="sessionFactory"> <ref local="sessionFactory" /> </property> </bean> <bean id="cmdItemDAO" class="com.syrj.dao.impl.CmdItemDAOImpl"> <property name="sessionFactory"> <ref local="sessionFactory" /> </property> </bean> <bean id="baseTxProxy" lazy-init="true" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" abstract="true"> <property name="transactionManager"><ref bean="transactionManager"/></property> <property name="transactionAttributes"> <props> <prop key="*">PROPAGATION_REQUIRED</prop> <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop> </props> </property> </bean> <bean id="cmdFuncService" parent="baseTxProxy"> <property name="target"> <bean class="com.syrj.service.impl.CmdFuncServiceImpl" > <property name="cmdItemDAO"><ref local="cmdItemDAO"/></property> <property name="cmdFuncDAO"><ref local="cmdFuncDAO"/></property> <bean> </property> </bean> 这里说明一下:property name="cmdItemDAO" 这个name是serviceImpl中声明的DAO的名字! local="cmdItemDAO"是这个配置文件中声明的DAO的实现 |
|
返回顶楼 | |
发表时间:2005-12-05
flyjie 写道 你的sessionFactory中加一句:
<property name="hibernateProperties"> <props> <prop key="hibernate.dialect">net.sf.hibernate.dialect.MySQLDialect</prop> <prop key="hibernate.show_sql">true</prop> </props> </property> 事务配置这么写: <bean id="cmdFuncDAO" class="com.syrj.dao.impl.CmdFuncDAOImpl"> <property name="sessionFactory"> <ref local="sessionFactory" /> </property> </bean> <bean id="cmdItemDAO" class="com.syrj.dao.impl.CmdItemDAOImpl"> <property name="sessionFactory"> <ref local="sessionFactory" /> </property> </bean> <bean id="baseTxProxy" lazy-init="true" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" abstract="true"> <property name="transactionManager"><ref bean="transactionManager"/></property> <property name="transactionAttributes"> <props> <prop key="*">PROPAGATION_REQUIRED</prop> <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop> </props> </property> </bean> <bean id="cmdFuncService" parent="baseTxProxy"> <property name="target"> <bean class="com.syrj.service.impl.CmdFuncServiceImpl" > <property name="cmdItemDAO"><ref local="cmdItemDAO"/></property> <property name="cmdFuncDAO"><ref local="cmdFuncDAO"/></property> <bean> </property> </bean> 这里说明一下:property name="cmdItemDAO" 这个name是serviceImpl中声明的DAO的名字! local="cmdItemDAO"是这个配置文件中声明的DAO的实现 配置都跟你给的一样了,还是不行呀.. |
|
返回顶楼 | |
发表时间:2005-12-05
请各位再帮看看.. 配置文件见附近!
|
|
返回顶楼 | |
发表时间:2005-12-05
dwygp 写道 你好, 自己做事务声明可以回滚! 错误就是我throw一个异常。我现在就是要清楚在错误后要能回滚! 你的异常必须是UnChecked Exception |
|
返回顶楼 | |