【问题标题】:JPA (Eclipselink impl) lazy fetch outside transactionJPA(Eclipselink impl)延迟获取外部事务
【发布时间】:2013-09-21 20:48:21
【问题描述】:

我正在使用 glassfish 和 Java EE 6。我使用 Jersey 创建了一个安静的 Web 服务,它在 Comment 表上执行搜索操作。每条评论都有一个Author

我有一个@Stateless@Path('comments') EJB 监听 Http 请求。然后我有这个方法:

@GET
@Path("search")
@Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
public List<Comment> getComments(@QueryParam("criteria").....)

我的 JPA 查询获取了一堆 cmets。每条评论都有一个与其作者的关联,因为它没有设置为 LAZY,所以也会被获取,但是除了他的 ID,即使我尝试将它们设置为 @Basic(fetch = FetchType.EAGER),大多数作者的字段都没有被检索到(例如作者的名字) .当我执行以下操作时会检索到:

comment.getAuthor().getName()

但是,如果我在事务中,则此方法有效,因此持久性上下文在我的方法执行期间一直处于活动状态。但是,我不想在这里使用事务,因为这只是搜索数据库而不更改任何数据(因此是@TransactionAttribute(...NOT_SUPPORTED)),所以当我调用上面的 getter 时,我只是得到一个“null”(没有数据是fetched),我不知道如何解决这个问题。

我不想使用事务,但我希望 Eclipselink 急切地获取作者的属性。

编辑:

由于我不在事务中,简而言之,我想要让 eclipselink 为我从查询中获得的每条评论检索我的“comment.author.name”字段。

【问题讨论】:

    标签: jakarta-ee jpa eclipselink


    【解决方案1】:

    我现在使用非标准 Eclipselink“LoadGroup”功能解决了这个问题:

    LoadGroup lg = new LoadGroup();
    lg.addAttribute("author.name");
    query.setHint(QueryHints.LOAD_GROUP, lg);
    result = query.getResultList();
    

    不过我正在寻找标准解决方案。

    【讨论】:

      猜你喜欢
      • 2012-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-19
      • 2015-12-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多