2013-06-13 20 views
0

我在从多个路径加载hibernate映射时遇到问题。春季会议工厂没有找到具有相同类路径的多个目录中的映射文件

我的春季会议厂是定义如下:

<beans> 
    ... 
    <bean id="sessionFactory" class="org.springframwork.orm.hibernate3.LocalSessionFactory"> 
    </bean> 

    <property name="mappingLocations"> 
    <list> 
     <value>classpath:/mapping/*.hbm.xml</value> 
    </list> 
    </property> 

当我把我的映射Foo.hbm.xmlBar.hbm.xml进入目录src/main/resources/mappings,那么当Hibernate被初始化都映射发现。

但是,当我将Foo.hbm.xml放入目录src/main/resources/mappingBar.hbm.xml到目录src/test/resources/mapping时,则只能找到后一个映射文件。 Hibernate将因“无法找到Foo映射”错误而失败。

我可以看到映射被复制到目录target/classes/mappingtarget/test-classes/mapping,为什么hibernate(或者spring本地会话工厂bean)找不到两个映射文件?我认为“classpath:/ mapping/*。hbm.xml”会找到target/classes/mappingtarget/test-classes/mapping目录吗?

编辑:我在运行单元测试时遇到了这个问题,所以我期望找到在src/main/resourcessrc/test/resources中找到的映射。

回答

0

您正在使用maven。并且,由于您将Bar映射放入测试资源目录,因此它仅在运行测试时可用。

我假设你有一个持久单元配置为与下面的例子

<persistence-unit ...> 
    <class>something.Foo</class> 
    <class>something.Bar</class> 
</persistence-unit> 

在启动时会发生什么情况是,春天开始休眠,休眠读取持久化单元,并要求工厂的映射。但请记住,Bar只是一个测试课程。所以Spring找到src/main/resources的映射,但由于它不能作为测试运行,所以它看不到src/test/resources

+0

感谢您的回复。我应该说我在运行测试时遇到了这个问题,因此除了在主资源目录中定义的映射外,我还希望能够找到在测试资源目录中定义的映射。当我使用'src/main/resources'中的所有映射运行测试时,找到所有映射。当我使用从src/main/resources到src/test/resources的一个映射运行测试时,只能找到在src/test/resources中找到的映射。 –

相关问题