问题标签 [toplink]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
6749 浏览

java - 使用 JPA/Toplink 进行批量插入

我有一个通过 HTTP 接口接收消息的 Web 应用程序,例如:

该请求包含发件人的 ID、收件人的 ID 和消息的文本。

此消息应按如下方式处理:

  • 从数据库中查找源和目标的匹配用户对象
  • 创建对象树:包含消息文本字段的 Message 和用于源和目标的两个 User 对象
  • 将此树持久化到数据库中。

树将由我无法触及的其他应用程序加载。

我使用 Oracle 作为后备数据库,使用 JPA 和 Toplink 进行数据库处理任务。如果可能的话,我会留在这些地方。

如果没有太多优化,我可以在我的环境中实现约 30 个请求/秒的吞吐量。这并不多,我需要约 300 个请求/秒。所以我测量了性能瓶颈在哪里,发现调用em.persist()占用了大部分时间。如果我简单地注释掉该行,吞吐量将远远超过 1000 个请求/秒。

我尝试编写一个小型测试应用程序,它使用简单的 JDBC 调用将 100 万条消息持久保存到同一个数据库。我使用了批处理,这意味着我做了 100 次插入然后提交,并重复直到所有记录都在数据库中。在这种情况下,我测量了大约 500 个请求/秒的吞吐量,这可以满足我的需求。

很明显,我需要在这里优化插入性能。然而,正如我之前提到的,我想继续使用 JPA 和 Toplink,而不是纯粹的 JDBC。

你知道用 JPA 和 Toplink 创建批量插入的方法吗?您能否推荐任何其他技术来提高 JPA 持久性性能?

附加信息:

“请求/秒”在这里表示:请求总数/从测试开始到最后一条记录写入数据库的总时间。

我试图em.persist()通过在 servlet 内容和持久化程序之间创建一个内存队列来进行异步调用。对演出有很大帮助。然而,队列确实增长得非常快,因为应用程序将连续接收约 200 个请求/秒,这对我来说不是一个可接受的解决方案。

在这种分离的方法中,我收集了 100 毫秒的请求,并em.persist()在提交事务之前调用了所有收集的项目。EntityManagerFactory 在每个事务之间缓存。

0 投票
6 回答
21073 浏览

java - 何时使用 Hibernate/JPA/Toplink?

现在我正在制作一个非常简单的网站——大约 5 页。问题是集成某种数据库映射解决方案是否过于矫枉过正并且值得花时间,或者是否最好只使用普通的旧 JNDI。我可能需要从数据库中读取/写入十几个东西。我想我对这些技术有基本的了解,但仍然需要大量参考文档。其他人之前面临过这个决定吗?

编辑:对不起,我应该指定 JNDI 来查找数据库连接和 JDBC 来执行操作。

0 投票
3 回答
59262 浏览

java - 我必须关闭()每个 EntityManager 吗?

我刚刚开始将我自己开发的持久性框架迁移到 JPA。

鉴于持久性框架隐藏了很多管道,我很想知道不关闭 EntityManagers 是否会造成资源泄漏,或者框架是否会为我收集并关闭它们。

我打算在所有地方关闭它们,但我必须这样做吗?

目前使用 TopLink,只是因为它很容易与 NetBeans 一起工作,但很高兴研究其他 JPA 提供程序。

0 投票
4 回答
506 浏览

primary-key - 现在我已将主键转换为 GUID,如何修复性能?

我使用 TopLink 作为我的 ORM 和 MySQL 作为数据库。

我将我的自动增量主键换成我的一张表的 GUID(好吧,不完全是:我实际上使用的是随机的 64 位整数,但这足以满足我的需要)。

无论如何,现在甚至不使用密钥的查询都需要更长的时间。

我能做些什么?

0 投票
1 回答
295 浏览

java - Toplink 对象未显示在 JDeveloper 中的 Toplink Map 节点下

由于某种原因,我在 TL Map 下看不到任何生成的对象。查看包含的图像(对不起,它不会使用社区 wiki 软件呈现......

http://img261.imageshack.us/my.php?image=nothingundernodetn5.png

0 投票
11 回答
73723 浏览

java - 如何在 JPA 中使用枚举

我有一个电影租赁系统的现有数据库。每部电影都有一个评级属性。在 SQL 中,他们使用约束来限制该属性的允许值。

我认为使用 Java 枚举将约束映射到对象世界会很好。但由于“PG-13”和“NC-17”中的特殊字符,不可能简单地采用允许的值。所以我实现了以下枚举:

使用 toString() 方法,方向 enum -> String 工作正常,但 String -> enum 不起作用。我得到以下异常:

[TopLink 警告]: 2008.12.09 01:30:57.434--ServerSession(4729123)--异常 [TOPLINK-116] (Oracle TopLink Essentials - 2.0.1 (Build b09d-fcs (12/06/2007))): oracle.toplink.essentials.exceptions.DescriptorException 异常描述:没有为字段 [FILM.RATING] 中的值 [NC-17] 提供转换值。映射:oracle.toplink.essentials.mappings.DirectToFieldMapping[rating-->FILM.RATING] 描述符:RelationalDescriptor(de.fhw.nsdb.entities.Film --> [DatabaseTable(FILM)])

干杯

蒂莫

0 投票
3 回答
45620 浏览

java - JPA 实现——哪一个最好用?

我使用了以下 JPA 实现:

  1. 冬眠,
  2. 顶联,
  3. OpenJPA

他们每个人都有自己的长处和短处。我发现 Hibernate 是三者中最先进的,只是它将自己的一些增强功能与 JPA 混合在一起,这使得切换到其他提供程序变得困难。最重要的是,它的查询解析器在解释 JPA 时更加宽松。它们使获得正确的库来支持休眠变得有点困难,因为我发现尝试获得所有依赖项的正确版本是一项任务。

Toplink 还可以,但给人的感觉是它有点残缺,因为甲骨文似乎希望你使用/购买?他们更先进的图书馆。尝试下载它也是一项任务,因为您需要通过运行 jar 文件来安装它。我发现它只实现了基本的 JPA 规范。我使用它的原因是 hibernate 使用了很多其他开源项目中常用的库,这些库经常会遇到类加载问题,尤其是在使用 JBoss 时

OpenJPA - 这是迄今为止最好的文档,易于下载和使用,但它似乎有很多错误。也许它只是我的代码,但我发现更高级的用法(例如与 CascadeType.all 设置的 OneToMany 关系)似乎不起作用。诚然,这可能是我的代码错了,我没有时间测试一个干净的案例,但许多这样的事件让我害怕使用它。我真的希望它变得更好。它的错误信息通常无助于解决问题。

人们还使用了哪些其他库,他们更喜欢哪些库,为什么?

0 投票
1 回答
172 浏览

jakarta-ee - OC4J - toplink 10/11 同时?

您能否在 OC4J 应用程序服务器中同时使用 toplink v. 10(toplink essentials)和 toplink v.11(eclipselink)?

两者都是 JPA 的不同实现。我想知道是否可以将这两种实现都添加到 OC4J 应用程序服务器中,以便 bean jar 可以自己选择要使用的实现。

请仅提供真实的经验和知识,而不是“我认为……”或“它应该有效”或“阅读手册”或“根据规范……”之类的答案。

0 投票
7 回答
20342 浏览

gwt - GWT 与 JPA

我正在尝试使用 GWT 1.5.3 构建数据库应用程序。我对我的对象使用 JPA 注释。似乎在托管模式下 GWT 的 RPC 工作正常。但是当我尝试使用 GWT-compiler 编译我的应用程序时,我收到如下错误:“无法解析导入 javax.persistence”、“无法将实体解析为类型”。我的项目路径中已经包含了 toplink-essentials.jar。我还需要什么设置来解决这个问题?

0 投票
4 回答
5188 浏览

hibernate - 陷阱和实际用例:Toplink、Hibernate、Eclipse Link、Ibatis

我用 Hibernate 作为我的 JPA 实现做了很多工作。在大多数情况下,它工作正常!但我也看到了很多陷阱:

  • 使用持久对象进行远程处理很困难,因为 Hibernate 用自己的集合实现替换了 Java 集合。所以每个客户端都必须有 Hibernate .jar 库。您必须注意 LazyLoading 异常等。解决此问题的一种方法是使用 Web 服务。
  • 对数据库进行不带任何锁定的脏检查。
  • “延迟 SQL”,导致数据访问不符合 ACID。(丢失的数据...)
  • 隐式更新>>所以我们不知道对象是否被修改(提交导致更新)。

Toplink、Eclipse Link 和 Ibatis 是否存在类似问题?我应该什么时候使用它们?他们有类似的表现吗?是否有理由选择 Eclipse Link/Toplink... 而不是 Hibernate?