0

从多个路径加载休眠映射时遇到问题。

我的 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,在 Hibernate 初始化时会找到两个映射。Bar.hbm.xmlsrc/main/resources/mappings

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

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

编辑:我在运行单元测试时遇到了这个问题,所以我希望在两者中都找到映射src/main/resources并且src/test/resources会找到。

4

1 回答 1

0

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

我假设您配置了类似于以下示例的持久性单元

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

启动时发生的是 Spring 启动 Hibernate,hibernate 读取持久性单元并要求工厂提供映射。但请记住,Bar 只是一个测试类。所以 Spring 从 中找到映射src/main/resources,但由于它不作为测试运行,所以它看不到src/test/resources

于 2013-06-14T10:55:39.623 回答