JPA(Eclipselink impl)懒惰提取外部事务

时间:2013-09-21 20:48:21

标签: java-ee jpa eclipselink

我使用glassfish和Java EE 6.我使用Jersey创建了一个restful 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查询获取了大量评论。每个评论都与其作者有关联,也是因为它未设置为LAZY而被提取,但除了他的ID之外,大多数作者的字段都没有被检索(例如作者的#)。名称)即使我尝试将它们设置为@Basic(fetch = FetchType.EAGER)。当我执行以下操作时会检索到这些:

comment.getAuthor().getName()

但是,如果我在一个事务中,这可以工作,所以持久化上下文在我的方法执行过程中是活着的。但是,我不想在这里使用交易,因为这只是搜索数据库而不是更改任何数据(因此@TransactionAttribute(...NOT_SUPPORTED)),所以当我调用上面的getter时,我只是得到一个&#34 ;空&#34; (没有提取数据),我也不知道如何解决这个问题。

我不想使用交易,但我希望Eclipselink热切地获取作者的属性。

编辑:

由于我不在交易中,简单地说,我想要的是eclipselink检索我的&#34; comment.author.name&#34;我从查询中得到的每条评论的字段。

1 个答案:

答案 0 :(得分:0)

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

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

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