applicationContext.xml代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
"> <bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName"
value="com.mysql.jdbc.Driver">
</property>
<property name="username"
value="xufeng">
</property>
<property name="password"
value="123456">
</property>
<property name="url" value="jdbc:mysql://localhost:3306/test"></property>
</bean>
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSource" />
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.MySQLDialect
</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
</props>
</property>
<property name="mappingResources">
<list>
<value>comm/data/Admin.hbm.xml</value>
<value>comm/data/TestTable.hbm.xml</value>
<value>comm/data/Books.hbm.xml</value>
<value>comm/data/Sales.hbm.xml</value></list>
</property>
</bean> <bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<tx:annotation-driven transaction-manager="transactionManager"/>
<aop:config>
<aop:pointcut id="serviceMethod"
expression="execution(* comm.data..*.*(..))" />
<aop:advisor pointcut-ref="serviceMethod" advice-ref="txAdvice" />
</aop:config>
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="save*" propagation="REQUIRED"/>
<tx:method name="add*" propagation="REQUIRED"/>
<tx:method name="del*" propagation="REQUIRED"/>
<tx:method name="*" read-only="true" rollback-for="exception"/>
</tx:attributes>
</tx:advice>
<bean id="AdminDAO" class="comm.data.AdminDAO">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
<bean id="TestTableDAO" class="comm.data.TestTableDAO">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
<bean id="BooksDAO" class="comm.data.BooksDAO">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
<bean id="SalesDAO" class="comm.data.SalesDAO">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
</beans>测试代码如下:
package test;import java.util.Date;
import java.util.List;import org.hibernate.Session;import comm.data.Admin;
import comm.data.AdminDAO;
import comm.data.TestTable;
import comm.data.TestTableDAO;import comm.factory.DmsSession;
import comm.factory.SpringFactory;import junit.framework.TestCase;import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;public class TestSearch extends TestCase {
public void testSer(){
Session session=new DmsSession().getSession();
AdminDAO ad=(AdminDAO)SpringFactory.getInstance().getBean("AdminDAO");
List list=ad.findAll();
session.close();
assert(list.size()>0);
System.out.println("222");
}
@Transactional
public void testUpdate(){
Session session=new DmsSession().getSession();
Admin adm=new Admin();
TestTable ttbean=new TestTable();
adm.setLoginName("3222");//其余两值置空,使其报错测试事务控制能否回滚
ttbean.setName("ss3asdf");
ttbean.setCode((long)2134);
ttbean.setCreateDate(new Date());
AdminDAO ad=(AdminDAO)SpringFactory.getInstance().getBean("AdminDAO");
TestTableDAO tt=(TestTableDAO)SpringFactory.getInstance().getBean("TestTableDAO");
tt.save(ttbean);
ad.save(adm);
session.close();
System.out.println("222");
}
}
结果报这个错:
java.lang.ClassCastException: $Proxy4 cannot be cast to comm.data.AdminDAO
at test.TestSearch.testUpdate(TestSearch.java:38)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at junit.framework.TestCase.runTest(TestCase.java:164)
at junit.framework.TestCase.runBare(TestCase.java:130)
at junit.framework.TestResult$1.protect(TestResult.java:106)
at junit.framework.TestResult.runProtected(TestResult.java:124)
at junit.framework.TestResult.run(TestResult.java:109)
at junit.framework.TestCase.run(TestCase.java:120)
at junit.framework.TestSuite.runTest(TestSuite.java:230)
at junit.framework.TestSuite.run(TestSuite.java:225)
at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:130)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)去掉<aop:config>
<aop:pointcut id="serviceMethod"
expression="execution(* comm.data..*.*(..))" />
<aop:advisor pointcut-ref="serviceMethod" advice-ref="txAdvice" />
</aop:config>这块代码没问题能执行。但是事务却无法控制执行了。
非常郁闷各位大大看看怎么回事!
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
"> <bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName"
value="com.mysql.jdbc.Driver">
</property>
<property name="username"
value="xufeng">
</property>
<property name="password"
value="123456">
</property>
<property name="url" value="jdbc:mysql://localhost:3306/test"></property>
</bean>
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSource" />
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.MySQLDialect
</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
</props>
</property>
<property name="mappingResources">
<list>
<value>comm/data/Admin.hbm.xml</value>
<value>comm/data/TestTable.hbm.xml</value>
<value>comm/data/Books.hbm.xml</value>
<value>comm/data/Sales.hbm.xml</value></list>
</property>
</bean> <bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<tx:annotation-driven transaction-manager="transactionManager"/>
<aop:config>
<aop:pointcut id="serviceMethod"
expression="execution(* comm.data..*.*(..))" />
<aop:advisor pointcut-ref="serviceMethod" advice-ref="txAdvice" />
</aop:config>
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="save*" propagation="REQUIRED"/>
<tx:method name="add*" propagation="REQUIRED"/>
<tx:method name="del*" propagation="REQUIRED"/>
<tx:method name="*" read-only="true" rollback-for="exception"/>
</tx:attributes>
</tx:advice>
<bean id="AdminDAO" class="comm.data.AdminDAO">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
<bean id="TestTableDAO" class="comm.data.TestTableDAO">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
<bean id="BooksDAO" class="comm.data.BooksDAO">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
<bean id="SalesDAO" class="comm.data.SalesDAO">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
</beans>测试代码如下:
package test;import java.util.Date;
import java.util.List;import org.hibernate.Session;import comm.data.Admin;
import comm.data.AdminDAO;
import comm.data.TestTable;
import comm.data.TestTableDAO;import comm.factory.DmsSession;
import comm.factory.SpringFactory;import junit.framework.TestCase;import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;public class TestSearch extends TestCase {
public void testSer(){
Session session=new DmsSession().getSession();
AdminDAO ad=(AdminDAO)SpringFactory.getInstance().getBean("AdminDAO");
List list=ad.findAll();
session.close();
assert(list.size()>0);
System.out.println("222");
}
@Transactional
public void testUpdate(){
Session session=new DmsSession().getSession();
Admin adm=new Admin();
TestTable ttbean=new TestTable();
adm.setLoginName("3222");//其余两值置空,使其报错测试事务控制能否回滚
ttbean.setName("ss3asdf");
ttbean.setCode((long)2134);
ttbean.setCreateDate(new Date());
AdminDAO ad=(AdminDAO)SpringFactory.getInstance().getBean("AdminDAO");
TestTableDAO tt=(TestTableDAO)SpringFactory.getInstance().getBean("TestTableDAO");
tt.save(ttbean);
ad.save(adm);
session.close();
System.out.println("222");
}
}
结果报这个错:
java.lang.ClassCastException: $Proxy4 cannot be cast to comm.data.AdminDAO
at test.TestSearch.testUpdate(TestSearch.java:38)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at junit.framework.TestCase.runTest(TestCase.java:164)
at junit.framework.TestCase.runBare(TestCase.java:130)
at junit.framework.TestResult$1.protect(TestResult.java:106)
at junit.framework.TestResult.runProtected(TestResult.java:124)
at junit.framework.TestResult.run(TestResult.java:109)
at junit.framework.TestCase.run(TestCase.java:120)
at junit.framework.TestSuite.runTest(TestSuite.java:230)
at junit.framework.TestSuite.run(TestSuite.java:225)
at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:130)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)去掉<aop:config>
<aop:pointcut id="serviceMethod"
expression="execution(* comm.data..*.*(..))" />
<aop:advisor pointcut-ref="serviceMethod" advice-ref="txAdvice" />
</aop:config>这块代码没问题能执行。但是事务却无法控制执行了。
非常郁闷各位大大看看怎么回事!
解决方案 »
- 关于struts2 spring3.1 hibernate4.1整合出现的问题
- 用户输入的数据如何存放在request对象
- dom4j读取XML数据问题
- captureEvents releaseEvents 这两个在firefox能用不
- 请问这是什么错
- 用Lucene-1.3-final为网站数据库建立索引 有问题
- 求ireport中文教程
- 请教高手:sitemesh做网页模板出现的问题?
- 如何用jsp 读取指定文件夹的结构,然生产生一个树形结构?
- double in_sum=double.parseDouble(in_sum1);有错?
- Linux+Weblogic生成二维码Could not initialize class sun.awt.X11GraphicsEnvironment
- ssh框架整合问题(急)
at test.TestSearch.testUpdate(TestSearch.java:38)代码强制转换错误咯...
38行有问题,类强制转换的原因,查看下你的类AdminDAO
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<tx:annotation-driven transaction-manager="transactionManager"/>
<aop:config>
<aop:pointcut id="serviceMethod"
expression="execution(* comm.data.*.*(..))" />
<aop:advisor pointcut-ref="serviceMethod" advice-ref="txAdvice" />
</aop:config>
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="save*" propagation="REQUIRED" />
<tx:method name="add*" propagation="REQUIRED" />
<tx:method name="del*" propagation="REQUIRED" />
<tx:method name="*" read-only="true" />
</tx:attributes>
</tx:advice>
<aop:pointcut id="serviceMethod"
expression="execution(* comm.data..*.*(..))" />
<aop:advisor pointcut-ref="serviceMethod" advice-ref="txAdvice" />
</aop:config>这块代码没问题能执行,能打印出sql语句,但是数据库中没有变化,然后加上就会出现错误
java.lang.ClassCastException: $Proxy4 cannot be cast to com.cong.manager.UserDaoImpl
at userDaoImplTest.UserDaoImplTest.test(UserDaoImplTest.java:19)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke
求解