2010-10-08 1 views
1

Я получаю исключение LazyInitializationException, чтобы проверить мои методы DAO, используя стек инструмента, определенный в заголовке. Я понимаю, что мой тест должен выполняться вне сеанса спящего режима, или он был закрыт, прежде чем я попытаюсь прочитать дочерние объекты из моего DAO. Из чтения документации я понял, что использование тега @TransactionConfiguration позволит мне определить менеджера транзакций, в котором будут выполняться тесты.junit 4 тестирование с весной 3.0 и Hibernate 3 в Eclipse - LazyInitializationException

Я читал документацию несколько раз и добавлял миллионы сообщений на форуме. Все еще хлопая головой в мою клавиатуру ... Что мне не хватает? Спасибо за вашу помощь!

мой блок тестовый класс:

@RunWith(SpringJUnit4ClassRunner.class) 
    @ContextConfiguration(locations = { 
     "classpath:/WEB-INF/applicationContext-db.xml", 
     "classpath:/WEB-INF/applicationContext-hibernate.xml", 
     "classpath:/WEB-INF/applicationContext.xml" }) 
    @TestExecutionListeners({DependencyInjectionTestExecutionListener.class, CleanInsertTestExecutionListener.class}) 
    @DataSetLocation("test/java/com/yada/yada/dao/dbunit-general.xml") 
    @TransactionConfiguration(transactionManager="transactionManager", defaultRollback = true) 
    @Transactional 
    public class RealmDAOJU4Test { 

    @Autowired 
    private DbUnitInitializer dbUnitInitializer; 

    @Autowired 
    private RealmDAO realmDAO; 

    @Test 
    public void testGetById() { 
     Integer id = 2204; 
     Realm realm = realmDAO.get(id); 
     assertEquals(realm.getName().compareToIgnoreCase(
     "South Technical Realm"), 0); 
     assertEquals(8, realm.getRealmRelationships().size()); 
    } 
} 

мой ApplicationContext-hibernate.xml:

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> 
    <property name="dataSource" ref="dataSource"></property> 
    <property name="useTransactionAwareDataSource" value="true" /> 
    ... other properties removed ... 
</bean> 

<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> 
    <property name="sessionFactory"> 
    <ref bean="sessionFactory" /> 
    </property> 
</bean> 

мое определение дао в applicationContext.xml

<bean id="realmDAOTarget" class="com.yada.yada.dao.hibernate.RealmDAOImpl"> 
    <property name="sessionFactory" ref="sessionFactory" /> 
</bean> 
<bean id="realmDAO" class="org.springframework.aop.framework.ProxyFactoryBean"> 
    <property name="proxyInterfaces"> 
    <value>com.yada.yada.dao.RealmDAO</value> 
    </property> 
    <property name="interceptorNames"> 
    <list> 
    <value>hibernateInterceptor</value> 
    <value>realmDAOTarget</value> 
    </list> 
    </property> 
</bean> 

ответ

2

хорошо, для тех, кто следующий по дома, вот что я пропустил:

TransactionalTestExecutionListener

в списке @TestExecutionListeners для аннотации @Transactional, чтобы иметь какой-либо эффект.

+0

Спасибо, только что пошел по поиску в SessionFactories и нашел тему. –

+0

Это сработало красиво, только взял меня на вечер, чтобы добраться до этого поста, спасибо! – credmp

Смежные вопросы