Hibernate的两个configuration文件的目的是什么?

这是我目前的项目结构:

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

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

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

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

所以当你使用Hibernate专有的API或JPA时,你通常不需要这两者。

但是,如果您使用的是 Hibernate Proprietary API并且已经有hibernate.cfg.xml (和hbm.xml XML映射文件),但想要开始使用JPA,则可以通过引用hibernate.cfg.xml来重用现有的configuration文件hibernate.ejb.cfgfile属性中的persistence.xml – 因此具有这两个文件。 重用现有的hbm.xml文件是一个现实的场景,可以certificate保持两个(即使我可能迁移到JPA批注长期)。

参考

  • Hibernate EntityManager
    • 2.2.2。 引导

hibernate.cfg.xml是针对Hibernate的; persistence.xml是用于JPA。

如果你没有JPA做Hibernate,你不需要后者。

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