为什么Scala会搜索persistence.xml而不是hibernate.cfg.xml?

时间:2018-12-05 17:44:01

标签: scala hibernate

我不是休眠专家,但是我正在尝试与Scala学习。到目前为止,我只能找到使用Java的休眠文档,而没有Scala。

我的困惑在于何时应该使用persistence.xml,何时使用hibernate.cfg.xml。

我有一个疑问,因为我看到了两者的示例,并且我的代码有时会抱怨找不到persistence.xml,当找到它时,又会抱怨找不到休眠属性...所以我感到困惑。我感到Scala / Java或不同标准之间存在某种摩擦...

有什么建议吗?

这是我的主要应用程序

package nl.busa.jpa


import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

object HibernateJpaScalaTutorial {
    var entityManagerFactory: EntityManagerFactory = Persistence.createEntityManagerFactory("nl.busa.jpa.HibernateJpaScalaTutorial")
    var entityManager: EntityManager = entityManagerFactory.createEntityManager()

def main(args: Array[String]) {

    entityManager.getTransaction().begin()
    entityManager.persist(new Buddy("Natalino", "Busa"))
    entityManager.persist(new Buddy("Angelina", "Jolie"))
    entityManager.persist(new Buddy("Kate", "Moss"))
    entityManager.getTransaction().commit()

    entityManager.getTransaction().begin();
    val allBuddies = entityManager.createQuery("From Buddy", classOf[Buddy]).getResultList
    println(allBuddies);

    entityManager.close();
}
}

这是我的hibernate.cfg.xml

<?xml version = "1.0" encoding = "utf-8"?>
<!DOCTYPE hibernate-configuration SYSTEM
            "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
<session-factory name="hibernate.cfg.xml">
    <property name = "hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
    <property name = "hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
    <property name = "hibernate.connection.url">jdbc:mysql://localhost/test</property>
    <property name = "hibernate.connection.username">root</property>
    <property name = "hibernate.connection.password"></property>
    <property name="hibernate.hbm2ddl.auto">create"</property>
</session-factory>
</hibernate-configuration>

我的错误信息是这样的:

  

在类路径中找不到任何META-INF / persistence.xml文件

1 个答案:

答案 0 :(得分:3)

这个问题很可能至少是

的部分重复

what is the purpose of two config files for Hibernate?

,但潜在的问题要广泛得多:总而言之:persistence.xml适用于JPA模式下的Hibernate,hibernate.cfg.xml适用于Hibernate的本机API)。乍一看,您的代码看起来像JPA,因此您需要persistence.xml。除非您有充分的理由想要使用专有的Hibernate API,否则最好的做法可能是先学习JPA。互联网上有很多涵盖JPA的优质资源,例如official Oracle tutorialLars Vogel's

JPA已在许多ORM中实现(不仅是Hibernate,而且还包括EclipselinkOpenJPA-有关更多信息,请参见What is a JPA implementation?。在我看来,只有在以下情况下才需要学习/使用Hibernate:您只会将Hibernate用作ORM解决方案。

如果您计划一天使用应用服务器,它们通常会带有嵌入式JPA实施,并且使用和管理这些内置工具要比提供另一个ORM容易得多。