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

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

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

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

【问题讨论】:

  • 所指的不是JPA的实现。它只是 JPA API jar(接口),是所有实现所必需的。

标签: java jpa


【解决方案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 实现

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-16
    • 1970-01-01
    • 2010-11-05
    • 1970-01-01
    • 2017-07-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多