我有以下測試:@Transactional在單元測試防止@PostLoad從被調用
public class Book
{
public boolean postLoadInvoked;
@PostLoad
private void onPostLoad()
{
postLoadInvoked = true;
}
}
public class MyIntegrationTest extends AbstractIntegrationTest
{
@Autowired
private BookDAO bookDAO;
@Test
public void loadBooks()
{
Book book = bookDAO.findOne(...);
assertTrue(book.postLoadInvoked);
}
}
此測試通過按原樣,但如果我的@Transactional
註釋添加到測試類,它失敗:
@Transactional
@TransactionConfiguration(defaultRollback=true)
public class MyIntegrationTest extends AbstractIntegrationTest
爲什麼使用@Transactional
配置測試會影響JPA回調方法?
編輯
的DAO只是一個Spring數據存儲庫,所以沒有邏輯:
public interface BookDAO extends
JpaRepository<Book, Long>,
QueryDslPredicateExecutor<Book> {}
事務管理器也有一個標準配置:
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
<property name="dataSource" ref="dataSource" />
</bean>
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="packagesToScan">
<list>
<value>com.mangofactory.example</value>
</list>
</property>
<property name="persistenceUnitName" value="spring-test" />
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="showSql" value="true" />
<property name="generateDdl" value="true" />
<property name="databasePlatform" value="org.hibernate.dialect.H2Dialect" />
</bean>
</property>
</bean>
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="org.h2.Driver" />
<property name="url" value="jdbc:h2:mem:test;DB_CLOSE_DELAY=-1" />
</bean>
您可以添加bookDao代碼和transactionManager的配置嗎? – gkamal 2012-08-17 05:02:03
@gkamal當然,更新了更多的配置。 – 2012-08-17 05:49:54
您的@PostLoad方法不會編譯...它沒有返回類型。您確定在編譯此更改後運行測試嗎? – 2012-08-30 19:55:56