我使用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;我从查询中得到的每条评论的字段。
答案 0 :(得分:0)
我现在使用非标准的Eclipselink“LoadGroup”功能解决了这个问题:
LoadGroup lg = new LoadGroup();
lg.addAttribute("author.name");
query.setHint(QueryHints.LOAD_GROUP, lg);
result = query.getResultList();
我正在寻找标准解决方案。