JPA EntityManager를 사용하여 엔티티를 가져오고 업데이트하는 DAO를 테스트하려고합니다. 내 단위 테스트를 Transactional로 표시하고 defaultRollback 속성을 false로 설정했습니다. 그러나 룬 시간 예외를 throw 할 때 테스트가 끝날 때 트랜잭션이 롤백되지 않습니다. 데이터가 DB에 유지됩니다. 다음은 스프링 구성과 함께 단위 테스트 코드입니다. 분명히 뭔가 빠져 있지만 havent는 무엇을 확인할 수있었습니다. 는, BTW 거래는Spring JUnit JPA 트랜잭션이 롤백되지 않습니다.
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="${jpa.driverclassname}" />
<property name="url" value="${jpa.url}" />
<property name="username" value="${jpa.username}" />
<property name="password" value="${jpa.password}" />
</bean>
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="persistenceUnitName" value="${jpa.persistenceunitname}"/>
<property name="dataSource" ref="dataSource" />
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.OpenJpaVendorAdapter">
<property name="databasePlatform" value="org.apache.openjpa.jdbc.sql.DBDictionary"/>
</bean>
</property>
</bean>
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory"/>
</bean>
<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor"/>
트랜잭션이 롤백되지 않았 음을 어떻게 확인 했습니까? 데이터베이스가 값을 업데이트 했습니까? 어떤 데이터베이스를 사용하고 있습니까? mysql을 사용하는 경우 어떤 스토리지 엔진입니까? – gkamal
예, SQL Server 2008을 사용하고 데이터베이스에 값이 업데이트되었습니다. Btw, 내 JPA 공급자는 IBM Websphere Thin 클라이언트입니다 – user320587
TransactionalTestExecutionListener.class에 의해 트랜잭션을 롤백하지 않은 문제가있었습니다. 감사합니다 !!!! – avalon