我正在尝试将Struts / Spring应用程序从Hibernate 3.1升级到Hibernate 4.3。
我正在使用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 :(得分:0)
这可能与以下解释有关:
来源:http://www.unitils.org/tutorial-hibernate.html
在引擎盖下,hibernate使用org.hibernate.cfg.Configuration或org.hibernate.cfg.AnnotationConfiguration的实例来加载配置文件和注册映射类,具体取决于你是使用hibernate的经典方式还是你使用带注释的hibernate。默认情况下,Unitils使用org.hibernate.cfg.AnnotationConfiguration。如果您只使用映射文件并且类路径中没有hibernate注释扩展,则可以通过设置以下属性来更改此属性:
HibernateModule.configuration.implClassName = org.hibernate.cfg.Configuration
答案 1 :(得分:0)
@Ozan Tabak:我们使用以下属性,遇到同样的问题。
HibernateModule.configuration.implClassName=org.hibernate.cfg.Configuration
看起来它是单元中的一个错误,which doesn't seem to support hibernate4
Unitils ver 3.3不支持加载sessionFactory 定义sessionFactory时的@SpringApplicationContext org.springframework.orm.hibernate4.LocalSessionFactoryBean。
Unitils搜索 “org.springframework.orm.hibernate3.LocalSessionFactoryBean”并不能 找到这个类因为hibernate 4有新的命名空间 “org.springframework.orm.hibernate4.LocalSessionFactoryBean”。
由于这个问题自2012年9月以来就存在,我预计不会很快修复错误。