Spring boot 如何使用SpringBoot但使用HibernateXML映射文件而不是注释

Spring boot 如何使用SpringBoot但使用HibernateXML映射文件而不是注释,spring-boot,Spring Boot,我在实体上使用SpringBoot2.0和注释。我想删除注释并切换到使用XML配置文件将域模型映射到数据库,以便从域模型中删除技术实现的任何迹象 问题是,我找不到如何配置SpringBoot以使用hibernate映射文件 我很高兴Spring能够设置数据库连接,但如果可能,我希望通过XML管理映射。也许您可以使用LocalSessionFactoryBean来设置映射位置。(见:) 也许是这样的: @Bean public LocalSessionFactoryBean sessionFact

我在实体上使用SpringBoot2.0和注释。我想删除注释并切换到使用XML配置文件将域模型映射到数据库,以便从域模型中删除技术实现的任何迹象

问题是,我找不到如何配置SpringBoot以使用hibernate映射文件


我很高兴Spring能够设置数据库连接,但如果可能,我希望通过XML管理映射。

也许您可以使用
LocalSessionFactoryBean
来设置映射位置。(见:)

也许是这样的:

@Bean
public LocalSessionFactoryBean sessionFactory() {
    LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();
    sessionFactory.setMappingResources(...locations of your xml);
    //Other configutation omitted
    return sessionFactory;
}
我可以工作


注意:我还没有测试解决方案。

在一次偶然的机会中,我创建了resources/hibernate文件夹,然后创建了一个映射文件user.hbm.xml,然后从实体类中删除了注释,Spring似乎已经自动选择了hibernate xml文件。

无需配置,您只需要将*.hbm.xml文件放在src/main/resources文件夹下,Spring Boot就可以自动扫描它们


在我的测试中,我已经将Item.hbm.xml放在/src/main/resources/hibnate文件夹下,如果您使用LocalSessionFactoryBean创建sessionfactorybean,那么我可以成功地从DB加载该项,然后创建以下属性,并将所有*.hbm.xml文件保存在资源文件夹内或数据库中类路径应该可以解决这个问题

<property name="mappingResources">
  <list>
    <value>MyMapping.hbm.xml</value>
  </list>
</property>

MyMapping.hbm.xml

这实际上是hibernate检测那些
*.hbm.xml
文件,这些文件更是实现技术的标志。您现在更难使用自定义HBM文件而不是标准注释移动到EclipseLink而不是Hibernate。因此,您认为域对象上的JPA注释是一种更合适的方法?我想这是一个固执己见的答案,您还可以使用标准化的
orm.xml
来指定映射(是的,您也可以通过XML而不是注释来表示JPA映射)因此,如果你真的想从代码中删除它,你应该使用
orm.xml
映射。那么,使用特定于hibernate的xml怎么不是一种技术实现的标志呢?JPA也不是一种规范的实现,hibernate就是其中的一种实现。只要你不使用特定于hibernate的注释,我就可以但是hibernate会检测到额外的映射文件(或者默认的
orm.xml
,如果你坚持使用JPA)在类路径的根目录上,或者您可以通过配置指定列表。此外,我还检查了您还可以在application.properties中为属性定义hbm文件:spring.jpa.mapping-resources。示例:
spring.jpa.mapping resources=hibernate/MyMapping.hbm.xml