从多个路径加载hibernate映射时遇到问题。
我的Spring会话工厂定义如下:
<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.xml
和Bar.hbm.xml
放入目录src/main/resources/mappings
时,在初始化Hibernate时会找到两个映射。
但是当我将Foo.hbm.xml
放入目录src/main/resources/mapping
和Bar.hbm.xml
进入目录src/test/resources/mapping
时,只能找到后一个映射文件。 Hibernate将因“无法找到Foo的映射”错误而失败。
我可以看到映射被复制到目录target/classes/mapping
和target/test-classes/mapping
,那么为什么不能休眠(或Spring本地会话工厂bean)找到两个映射文件?我认为“classpath:/ mapping / * .hbm.xml”会找到target/classes/mapping
和target/test-classes/mapping
目录吗?
编辑:我在运行单元测试时遇到此问题,因此我希望找到src/main/resources
和src/test/resources
中找到的映射。
答案 0 :(得分:0)
你正在使用maven。由于您将Bar映射放入测试资源目录,因此仅在运行测试时可用。
我假设你有一个类似于下面例子的持久性单元
<persistence-unit ...>
<class>something.Foo</class>
<class>something.Bar</class>
</persistence-unit>
启动时发生的事情是Spring启动Hibernate,hibernates读取持久性单元并询问工厂的映射。但请记住,Bar只是一个测试类。所以Spring从src/main/resources
找到映射,但由于它不作为测试运行,因此它看不到src/test/resources
。