这是我目前的项目结构:
pom.xml
/src
/main
/resources
hibernate.cfg.xml
/META-INF
persistence.xml
我在两个文件(hibernate.cfg.xml
和persistence.xml
)中都有非常相似的配置参数,这看起来很奇怪,但这是我在许多在线示例和教程中看到的。我无法理解为什么我需要有两个文件。是否可以只使用一个?请解释一下。
PS。例如,我应该在两个文件中声明hibernate.dialect
,还是仅仅一个就足够了?如果是的话,使用哪一个?
答案 0 :(得分:67)
如果您使用的是Hibernate的专有API,则需要hibernate.cfg.xml
。如果您使用JPA即Hibernate EntityManager,则需要persistence.xml
。
因此,当您使用 Hibernate专有API或JPA时,通常不需要两者。
但是,如果正在使用 Hibernate专有API并且已经有hibernate.cfg.xml
(和hbm.xml
XML映射文件)但想要开始使用JPA,则可以重复使用通过引用hibernate.cfg.xml
属性中persistence.xml
中的hibernate.ejb.cfgfile
来获取现有配置文件,从而拥有这两个文件。重用现有的hbm.xml
文件是IMO的一个现实场景,可以证明两者都是合理的(即使从长远来看,我可能会迁移到JPA注释)。
答案 1 :(得分:16)
hibernate.cfg.xml
适用于Hibernate; persistence.xml
适用于JPA。
如果你在没有JPA的情况下进行休眠,则不需要后者。
如果你做JPA,你必须有一个提供者实现,这意味着Hibernate,EclipseLink等(可能还有其他合法的JPA实现,但我现在没时间检查。)