我不是休眠专家,但是我正在尝试与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文件
答案 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 tutorial或Lars Vogel's
JPA已在许多ORM中实现(不仅是Hibernate,而且还包括Eclipselink或OpenJPA-有关更多信息,请参见What is a JPA implementation?。在我看来,只有在以下情况下才需要学习/使用Hibernate:您只会将Hibernate用作ORM解决方案。
如果您计划一天使用应用服务器,它们通常会带有嵌入式JPA实施,并且使用和管理这些内置工具要比提供另一个ORM容易得多。