我的应用程序简单,具有以下文件夹结构:
这是beans.xml Spring配置文件的一部分:
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="classpath:./META-INF/jdbc.properties" />
</bean>
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${jdbc.driverClassName}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</bean>
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="configLocation" value="classpath:./META-INF/hibernate.cfg.xml" />
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">${hibernate.dialect}</prop>
</props>
</property>
<property name="mappingResources">
<list>
<value>classpath:./META-INF/EntityMapping.hbm.xml</value>
</list>
</property>
</bean>
<tx:annotation-driven transaction-manager="txManager" />
<bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
当我开始我的单元测试时,我得到以下异常:
org.springframework.beans.factory.BeanCreationException:错误 在类路径资源中定义名为'wrapperClass'的bean [META-INF / beans.xml]:无法解析对bean'wrapperClassField'的引用 设置构造函数参数时;嵌套异常是 org.springframework.beans.factory.BeanCreationException:错误 创建在类路径资源中定义的名为“xmlBooksource”的bean [META-INF / beans.xml]:无法解析对bean的引用 设置bean属性'sessionFactory'时'sessionFactory';嵌套 异常是org.springframework.beans.factory.BeanCreationException: 在类路径中定义名为'sessionFactory'的bean时出错 resource [META-INF / beans.xml]:调用init方法失败; 嵌套异常是java.io.FileNotFoundException:类路径资源 [classpath:/META-INF/EntityMapping.hbm.xml]无法打开,因为它不存在
当我输入
时会抛出相同的异常<property name="mappingResources">
<list>
<value>EntityMapping.hbm.xml</value>
</list>
</property>
为什么spring无法找到此文件以及我必须如何填充其位置才能使此代码生效?
提前致谢。
答案 0 :(得分:3)
您是否尝试删除classpath:
前缀?在查看Hibernate代码时,mappingResources
setter期望将字符串传递给new ClassPathResource(String)
。这需要类路径资源。然后该字符串将传递给ClassLoader.getResourceAsStream(String)
。这些代码都不会从资源字符串的前面删除“classpath:”前缀。
答案 1 :(得分:0)
我不确定错误消息是否与您发布的beans.xml内容一致。 你有错误
[classpath:/META-INF/EntityMapping.hbm.xml]
与
不一样 classpath:./META-INF/EntityMapping.hbm.xml
注意缺少的“。”在错误的开头。
第二个beans.xml配置应该产生一个不同的错误消息:
[classpath:EntityMapping.hbm.xml]
这将在您编译的应用程序的根目录中搜索文件(jar,war,爆炸,你有什么)。
答案 2 :(得分:0)
我已经使用Spring 3.1成功配置了Hibernate 4。我的applicationContext.xml文件位于web-inf文件夹中,并具有以下hibernate配置:
<!-- Session Factory Declaration -->
<bean id="SessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="DataSource" />
<!--
<property name="annotatedClasses">
<list>
<value>iltaf.models.Levels</value>
</list>
</property>
-->
<property name="mappingLocations" value="classpath:iltaf/models/*.hbm.xml" />
<property name="configLocation">
<value>classpath:hibernate.cfg.xml</value>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
</bean>
<!-- Enable the configuration of transactional behavior based on annotations -->
<tx:annotation-driven transaction-manager="txManager"/>
<!-- Transaction Manager is defined -->
<bean id="txManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="SessionFactory"/>
</bean>
</beans>
我在src文件夹中有单独的hibernate.cfg.xml文件。我正在使用Eclipse Juno Java EE版本。