Java 持久性 API

Posted

技术标签:

【中文标题】Java 持久性 API【英文标题】:Java Persistence API 【发布时间】:2011-02-03 08:17:25 【问题描述】:

我是Java Persistence API 的新手。我刚刚学会了它,现在想在我的 Java 桌面应用程序中使用它。但我对此有以下疑问:

第一季度。哪个 JPA 实现的大小最小(因为我希望我的应用程序的大小尽可能小)?

第二季度。如何在persistence.xml 文件中找到<provider> 标记的值。我知道它的值是特定于供应商的,但我找不到从 here 下载的 JPA 实现的值。

【问题讨论】:

所指的不是JPA的实现。它只是 JPA API jar(接口),是所有实现所必需的。 【参考方案1】:

第一季度。哪个 JPA 实现的大小最小(因为我希望我的应用程序的大小尽可能小)?

对于 JPA 1.0:

休眠实体管理器 3.4.0.GA:~4.9MB EclipseLink 1.1.3:~4.7MB OpenJPA 1.2.2:~2.7MB(我不确定这个,暂时没有测试,所以我可能会遗漏一些 jars)

我会远离 TopLink Essentials。

对于 JPA 2.0:

DataNucleus 2.0.3:~3.7MB EclipseLink 1.2 和 2.0+:~4.8MB Hibernate Entity Manager 3.5.0-Final:~5.8MB OpenJPA 2.0.0-beta3:未测量(仍处于测试阶段)

这些措施已经在我的宠物项目上完成(包括除了 JDBC 驱动之外的依赖项)。就个人而言,我不会只根据大小来选择,即使是桌面应用也是如此。

第二季度。如何在persistence.xml文件中找到标签的值。

数据核:org.datanucleus.jpa.PersistenceProviderImpl EclipseLink:org.eclipse.persistence.jpa.PersistenceProvider 休眠:org.hibernate.ejb.HibernatePersistence OpenJPA:org.apache.openjpa.persistence.PersistenceProviderImpl TopLink 要点:oracle.toplink.essentials.PersistenceProvider

【讨论】:

好的...不管大小,你会选择哪种实现方式? 我正准备使用 TopLink Essentials。你为什么要远离它? @Yatendra 因为 Toplink Essentials 没有任何反应(它已被维护但已死),因为它需要编织,因为您需要使用 javaagent,因为我一直觉得使用它很痛苦(可能不是虽然有 5 个实体会很痛苦)。但它有效。 @Yatendra 我喜欢 Hibernate,它被广泛使用、测试、支持,这对我很重要。但是,同样,这对于一个五表应用程序来说可能不是那么重要。也许您应该实现您的应用程序并使用各种 JPA 提供程序对其进行测试。【参考方案2】:

第一季度。非常粗略的计算:

具有 deps 的 Hibernate(3.4.0.GA 左右的版本)大约是。 3.6 兆。 TopLink Essentials (2.0.1-04) 大约2.4 兆。 EclipseLink (ex. TopLink) (1.1.3-M1) ca. 4.7 兆。

第二季度。打开 JAR,检查 META-INF/services/javax.persistence.spi.PersistenceProvider 文件。

【讨论】:

我在问题中提供的 JPA 实施 (glassfish-persistence-api-b32g) 的链接只有 50KB 大小。但它在META-INF 文件夹中没有任何services 文件夹。 这是 API,不是实现。据我所知,GlassFish 使用 EclipseLink 作为 RI。 @BalusC 您想对<a href="http://findjar.com/jar/net/java/dev/glassfish/glassfish-persistence-api/b32g/glassfish-persistence-api-b32g.jar.html">glassfish-persistence-api-b32g</a> JPA 实施发表评论。由于它的最小大小(50KB),我被它所吸引。【参考方案3】:

你的意思是内存大小?或罐子的大小?内存大小取决于持久化的类数量、它们的元数据、打开的 EntityManager 数量、L1/L2 缓存中的内容。我知道 DataNucleus 使用的内存比 Hibernate 少,因为用户自己报告了这一点,不知道其他主要实现。

罐子的大小是衡量任何东西的一个毫无意义的指标,因为其中的大部分东西可能都没有使用。

PS。 DataNucleus 也是 JPA1+2 实现

【讨论】:

以上是关于Java 持久性 API的主要内容,如果未能解决你的问题,请参考以下文章

JPA的一些记录(JAVA持久化API)

JavaEE Tutorials - Java持久化API介绍

JPA简介

RabbitMQ java API

spark持久化

JPA规范及其它持久层框架