Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 本机持久性和休眠_Java_Hibernate_Jpa - Fatal编程技术网

Java 本机持久性和休眠

Java 本机持久性和休眠,java,hibernate,jpa,Java,Hibernate,Jpa,如果我们可以使用javax.persistence实现带有本机java支持的ORM,那么使用hibernate这样的提供程序的真正优势是什么* 《java持久化与hibernate》一书中说 Hibernate EntityManager is a wrapper around Hibernate Core that provides the JPA programming interfaces, supports the JPA entity instance lifecycle, and a

如果我们可以使用javax.persistence实现带有本机java支持的ORM,那么使用hibernate这样的提供程序的真正优势是什么*

《java持久化与hibernate》一书中说

Hibernate EntityManager is a wrapper around Hibernate Core that provides the
JPA programming interfaces, supports the JPA entity instance lifecycle, and allows
you to write queries with the standardized Java Persistence query language.
这里的名字Hibernate EntityManager让我很困惑。EntityManager是否属于hibernate

下面是如何通过java持久化来持久化域对象

EntityManagerFactory emf =
Persistence.createEntityManagerFactory("helloworld");
// First unit of work
EntityManager em = emf.createEntityManager();
EntityTransaction tx = em.getTransaction();
tx.begin();
下面是用于的persistence.xml文件

<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
version="1.0">
<persistence-unit name="helloworld">
<properties>
<property name="hibernate.ejb.cfgfile"
value="/hibernate.cfg.xml"/>
</properties>
</persistence-unit>
</persistence>

所以在这里,持久化单元再次声明了hibernate配置文件。那么什么是对象持久性呢;这里真的是retrun吗

EntityManager em=emf.createEntityManager()

createEntityManager()方法持有哪个对象?

JPA(Java持久化Api)是一种规范(我认为JRE只有接口),可以由许多提供者实现

因此,Hibernate(例如)使用Hibernate核心提供了实现JPA规范的类

在Hibernate上使用JPA的原因是Hibernate是完全合适的;他们可以随心所欲地更改API,如果您使用HibernateAPI,您将被迫使用Hibernate作为您的ORM。JPA是标准的,任何ORM提供商都可以选择满足JPA规范并通过它提供服务(f.e.EclipseLink)


通过使用JPA,您可以轻松地切换您的ORM,以防您发现比当前使用的ORM更适合您(性能、bug修复等)。如果您直接使用Hibernate,则无法轻松实现这一点。

因此,Hibernate特定的对象实现了EntityManager工厂和EntityManager接口,对吗?实现JPA的Hibernate对象实现了。最有可能的是,在内部,这些对象将把逻辑委托给Hibernate-only类(比如
Session
,它不是JPA规范的一部分)。