Hibernate 的两个配置文件的目的是啥?

Posted

技术标签:

【中文标题】Hibernate 的两个配置文件的目的是啥?【英文标题】:what is the purpose of two config files for Hibernate?Hibernate 的两个配置文件的目的是什么? 【发布时间】:2011-04-17 23:24:33 【问题描述】:

这是我目前的项目结构:

pom.xml
/src
  /main
    /resources
      hibernate.cfg.xml
      /META-INF
        persistence.xml

我在两个文件中都有非常相似的配置参数(hibernate.cfg.xmlpersistence.xml),这看起来很奇怪,但这是我在许多在线示例和教程中看到的。我不明白为什么我需要有两个文件。是否可以只与一个一起工作?请解释一下。

ps。例如,我应该在两个文件中声明hibernate.dialect,还是一个就足够了?如果是,使用哪一个?

【问题讨论】:

【参考方案1】:

hibernate.cfg.xml 用于休眠; persistence.xml 用于 JPA。

如果您在没有 JPA 的情况下使用 Hibernate,则不需要后者。

如果你做 JPA,你必须有一个提供者实现,这意味着 Hibernate、EclipseLink 等。(可能还有其他合法的 JPA 实现,但我现在没有时间检查。)

【讨论】:

我必须在两个文件中复制参数?【参考方案2】:

如果您使用 Hibernate 的专有 API,则需要 hibernate.cfg.xml。如果您使用的是 JPA,即 Hibernate EntityManager,则需要 persistence.xml

因此,您通常不需要两者,因为您使用任一 Hibernate 专有 API 或 JPA。

但是,如果您正在使用 Hibernate Proprietary API 并且已经拥有hibernate.cfg.xml(和hbm.xml XML 映射文件)但想开始使用 JPA,您可以通过以下方式重用现有配置文件在 persistence.xml 中引用 hibernate.cfg.xmlhibernate.ejb.cfgfile 属性中 - 因此有两个文件。重用现有的 hbm.xml 文件是 IMO 一个现实的场景,可以证明同时保留两者是合理的(即使从长远来看我可能会迁移到 JPA 注释)。

参考文献

休眠实体管理器 2.2.2. Bootstrapping

【讨论】:

感谢您的解释。我也在使用hibernate3:hbm2ddl,我认为它需要hibernate.cfg.xml,对吧?而且我觉得它不知道如何使用persistence.xml。我对吗?在这种情况下我需要两个文件? (我只与 JPA 合作) @Vincenzo 根据this article,hibernate3:hbm2ddl 可以与jpaconfigurationpersistence.xml 一起使用。所以不,你不需要hibernate.cfg.xml

以上是关于Hibernate 的两个配置文件的目的是啥?的主要内容,如果未能解决你的问题,请参考以下文章

(转)Hibernate的配置详解

Play 2.4 / Ebean / JPA / hibernate-entitymanager 的正确配置是啥?

hibernate4-maven-plugin 生成 PostgreSQL 模式的正确配置是啥?

Hibernate hbm2ddl.auto 配置的可能值是啥,它们的作用是啥

为多个数据库关系配置 Hibernate-Spring 的最佳实践是啥?

dljd_(011-020)_hibernate中配置文件详解