2014-11-10 5 views
0

Я пытаюсь обновить приложение Struts/Spring от Hibernate 3.1 до Hibernate 4.3.Unitils with Hibernate4

Я использую Untils для тестов базы данных, а в Hibernate 3.1 тесты работали правильно. В соответствии с Hibernate 4.3, тесты терпят неудачу со следующей ошибкой:

org.unitils.core.UnitilsException: Could not find a configuring @HibernateSessionFactory annotation or custom config method 
    at org.unitils.orm.common.OrmModule.getConfiguredPersistenceUnit(OrmModule.java:186) 
    at org.unitils.orm.common.OrmModule.getPersistenceUnit(OrmModule.java:147) 
    at org.unitils.orm.common.OrmModule.injectOrmPersistenceUnitIntoTestObject(OrmModule.java:333) 
    at org.unitils.orm.common.OrmModule$OrmTestListener.beforeTestSetUp(OrmModule.java:379) 
    at org.unitils.core.Unitils$UnitilsTestListener.beforeTestSetUp(Unitils.java:273) 
    at org.unitils.UnitilsJUnit4TestClassRunner$TestListenerInvokingMethodRoadie.runBeforesThenTestThenAfters(UnitilsJUnit4TestClassRunner.java:181) 
    at org.junit.internal.runners.MethodRoadie.runTest(MethodRoadie.java:86) 
    at org.junit.internal.runners.MethodRoadie.run(MethodRoadie.java:49) 
    at org.unitils.UnitilsJUnit4TestClassRunner.invokeTestMethod(UnitilsJUnit4TestClassRunner.java:95) 
    at org.junit.internal.runners.JUnit4ClassRunner.runMethods(JUnit4ClassRunner.java:61) 
    at org.unitils.UnitilsJUnit4TestClassRunner.access$000(UnitilsJUnit4TestClassRunner.java:42) 
    at org.unitils.UnitilsJUnit4TestClassRunner$1.run(UnitilsJUnit4TestClassRunner.java:60) 
    at org.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.java:33) 
    at org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:45) 
    at org.unitils.UnitilsJUnit4TestClassRunner.run(UnitilsJUnit4TestClassRunner.java:67) 
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) 
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192) 

Например, следующий тест будет провален:

@SpringApplicationContext({ configurationFiles }) 
public class SettlementDAOImplTest extends UnitilsJUnit4 { 
    @HibernateSessionFactory 
    private SessionFactory sessionFactory; 

    @Test 
    public void type() throws Exception { 
     assertThat(SettlementDAOImpl.class, notNullValue()); 
    } 
} 

Я проверил свои библиотеки, и я загружаю правильный версии Unitils и Hibernate, а мой sessionFactory определяется как org.springframework.orm.hibernate4.LocalSessionFactoryBean

На данный момент я даже не уверен, как действовать. Похоже, что Unitils ищет hibernate3.localSessionFactoryBean. Что я должен искать для устранения этой проблемы?

В моем файле ApplicationContext, то SessionFactory выглядит следующим образом:

<bean id="sessionFactory" 
    class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> 
    <property name="dataSource"> 
     <ref local="dataSource" /> 
    </property> 

    <property name="mappingResources"> 
     <list> 
      <value>Settlement.hbm.xml</value> 
     </list> 
    </property> 


    <property name="hibernateProperties"> 
     <props> 
      <!-- <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> --> 
      <prop key="hibernate.dialect"> 
       com.acteva.commons.util.MySQLDialect 
      </prop> 
      <prop key="hibernate.bytecode.provider">javassist</prop> 
      <prop key="hibernate.bytecode.use_reflection_optimizer">true</prop> 
      <prop key="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</prop> 
      <prop key="hibernate.show_sql">true</prop> 
      <prop key="hibernate.cache.use_query_cache">true</prop> 
      <prop key="hibernate.connection.release_mode"> 
       auto 
      </prop> 
     </props> 
    </property> 

    <property name="entityInterceptor" ref="entityInterceptorBean" /> 
</bean> 

ответ

0

Это может быть связано с объяснением ниже:

Источник: http://www.unitils.org/tutorial-hibernate.html

Под капотами, спящий режим использует экземпляр орг .hibernate.cfg.Configuration или org.hibernate.cfg.AnnotationConfiguration для загрузки файлов конфигурации и регистрации отображаемых классов, в зависимости от того, используете ли вы спящий режим классическим способом или используете ли вы спящий с аннотацией. По умолчанию Unitils использует org.hibernate.cfg.AnnotationConfiguration. Если вы используете файлы отображения только и не имеют расширение Аннотации Hibernate в вашем пути к классам, можно изменить, установив следующее свойство:

HibernateModule.configuration.implClassName = org.hibernate.cfg.Configuration

+0

Где моя собственность? – levacjeep

0

@Ozan Tabak: Мы используем следующее свойство, и мы сталкиваемся с той же проблемой.

HibernateModule.configuration.implClassName=org.hibernate.cfg.Configuration 

Похоже, это ошибка в unitils, which doesn't seem to support hibernate4

Unitils ver 3.3 does not support loading sessionFactory by @SpringApplicationContext when sessionFactory is defined by org.springframework.orm.hibernate4.LocalSessionFactoryBean.

Unitils searches for "org.springframework.orm.hibernate3.LocalSessionFactoryBean" and can't find the class because for hibernate 4 there is new namespace "org.springframework.orm.hibernate4.LocalSessionFactoryBean".

С этого вопроса существует с сентября 2012 года, я не ожидаю ошибку исправить в ближайшее время.

+0

Попасть в ту же или подобную проблему при попытке переноса тестов unitils на Hibernate 5. Вы нашли какое-либо решение проблемы? – gnomie

+0

@gnomie: К сожалению, нет. – gvo

+0

Спасибо! Итак, я ищу замену ... любое предложение? – gnomie

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

  • Нет связанных вопросов^_^