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.xml
和persistence.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.xml
在 hibernate.ejb.cfgfile
属性中 - 因此有两个文件。重用现有的 hbm.xml
文件是 IMO 一个现实的场景,可以证明同时保留两者是合理的(即使从长远来看我可能会迁移到 JPA 注释)。
参考文献
休眠实体管理器 2.2.2. Bootstrapping【讨论】:
感谢您的解释。我也在使用hibernate3:hbm2ddl
,我认为它需要hibernate.cfg.xml
,对吧?而且我觉得它不知道如何使用persistence.xml
。我对吗?在这种情况下我需要两个文件? (我只与 JPA 合作)
@Vincenzo 根据this article,hibernate3:hbm2ddl
可以与jpaconfiguration
和persistence.xml
一起使用。所以不,你不需要hibernate.cfg.xml
。以上是关于Hibernate 的两个配置文件的目的是啥?的主要内容,如果未能解决你的问题,请参考以下文章
Play 2.4 / Ebean / JPA / hibernate-entitymanager 的正确配置是啥?
hibernate4-maven-plugin 生成 PostgreSQL 模式的正确配置是啥?
Hibernate hbm2ddl.auto 配置的可能值是啥,它们的作用是啥