当前位置: 首页 > 知识库问答 >
问题:

Spring会话工厂在具有相同类路径的多个目录中找不到映射文件

程赞
2023-03-14

从多个路径加载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和条形图。hbm。xml到目录src/main/resources/mappings中,然后在初始化Hibernate时找到这两个映射。

但是当我把Foo。hbm。xml导入目录src/main/resources/mapping和工具栏。hbm。将xml放入目录src/test/resources/mapping中,然后只能找到后一个映射文件。Hibernate将失败,并出现“找不到Foo的映射”错误。

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

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


共有1个答案

戚兴邦
2023-03-14

您正在使用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。

 类似资料:
  • 我有一个pojo类,我在其中使用Hibernate注释。在我的数据库中,我有两个模式相似的表。我想知道在hibernate注释中是否有任何方法可以将同一个pojo类用于这两个表。请告诉我怎么做。

  • 我将一个名为的文件夹放在存储java文件的同一目录中。 我试图找到文件夹,但得到一个找不到的错误。 打印

  • 问题内容: 如果您的类路径中有两个jar,其中包含同一个类的不同版本,则类路径的顺序就变得至关重要。 我正在寻找一种可以检测并标记给定类路径或文件夹集中的潜在冲突的工具。 当然可以启动一个脚本: 稍后使用一些巧妙的sort / uniq / diff / grep / awk很有潜力,但是我想知道是否有人知道任何现有的解决方案。 问题答案: JBoss 的Tattletale工具是另一个候选者:“

  • 我有两个表:TABLE_A和TABLE_B,它们有一些同名的列。 我想从这两个表中检索所有列,并使用Jooq将查询结果转换为Pojo类,如下所示: 我想使用@Column注释来指定哪个列来自哪个表,但Jooq似乎不支持这个特性。我如何实现这一点? 或者这个,

  • 在这个问题中,我必须有一个带有键和字符串值的映射,以查看多个键是否映射到同一个值。换句话说,我的方法应该返回true,如果没有两个键映射到相同的值,则返回false。我尝试将所有地图放在一个集合中,检查每个元素,看看是否有两个相同值的副本;然而,这似乎对我不起作用。如有任何建议,将不胜感激,谢谢。 提示: 编写一个方法isUnique,该方法接受从字符串到字符串的映射作为参数,如果没有两个键映射到

  • 我有2个docker compose文件需要一起运行,文件的位置如下 /home/project1/docker compose。yml公司 和 /home/project2/docker-compose.yml 所以很明显两个服务应该有不同的上下文路径 但当我在docker下运行compose命令时 docker compose-f/home/project1/docker compose。ym