【问题标题】:EclipseLink 1.2 and BatchFetchEclipseLink 1.2 和 BatchFetch
【发布时间】:2011-11-07 21:50:52
【问题描述】:

我遇到了 EclipseLink 问题,针对数据库运行多个查询而不是单个查询。我发现下面的 SO 线程提供了 @BatchFetch 注释解决方案来帮助作为一个主查询运行

How to do join fetching instead of select fectching with EclipseLink?

How to define the EclipseLink annotation for the following?

但我使用的是 EclipseLink 1.2,并且上述注释的类仅受 EclipseLink 2+ 支持。感谢您是否可以为 1.2 提供替代解决方案。我尝试将整个项目迁移到 EclipseLink 2,但遇到了映射问题,我现在没有耐心修复。

我正在使用 EclipseLink 的 JPA

【问题讨论】:

  • +1 关于这个问题。写得很好。您工作的良好证据。抱歉,我没有答案。
  • JPA1.2 不存在。 JPA1.0存在,JPA2.0存在,JPA2.1在规划中
  • 编辑了我的问题-谢谢

标签: java jpa eclipselink


【解决方案1】:

@BatchFetch 注释只是将映射设置为使用批量读取。您可以在 EclipseLink 1.2 中使用 DescriptorCustomizer 和 ForeignReferenceMapping API 执行此操作。

【讨论】:

  • 除了 QueryHint BATCH,我将连接列设置为 FETCH LAZY,并且还使用了 Foreign Reference API 的 @JoinFetch(JoinFetchType.OUTER)。我们没有使用任何分页,取回正确的结果
【解决方案2】:

一种方法是使用查询提示,例如:

    query.setHint(QueryHints.BATCH, "c.sourceTable");

在这种情况下,所有csourceTable 关系将加载一个查询,而不是每个c 一个。

【讨论】:

  • @unbelli :感谢回复,我尝试了 @QueryHint(name = QueryHints.BATCH, value = "c.sourceTable") 和 query.setHint(QueryHints.BATCH, "c.sourceTable" ) 在此处发布之前。观察针对数据库运行的多个查询以进行 sourceTable 连接。就像我在这里撞到了一堵砖墙
  • 好吧,发布一些代码,我们可以修复它。 query.setHint 对我有用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-10
  • 2013-01-01
  • 2011-02-16
  • 1970-01-01
  • 2012-07-28
  • 2018-02-01
  • 2012-11-17
相关资源
最近更新 更多