0

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

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

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

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

comment.getAuthor().getName()

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

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

编辑:

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

4

1 回答 1

0

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

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

我正在寻找一个标准的解决方案。

于 2013-09-21T21:56:02.327 回答