2013-09-21 24 views
0

我正在使用glassfish和Java EE 6.我已經創建了一個平穩的Web服務與澤西島執行搜索操作在Comment表。每條評論有一個AuthorJPA(Eclipselink impl)懶惰獲取外部交易

我有一個@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時,我只是得到一個「null」(沒有數據被提取) ,我不知道如何解決這個問題。

我不想使用事務處理,但我希望Eclipselink能夠熱切地獲取作者的屬性。

編輯:

因爲我不是一個事務中,簡單地說,我要的是對的EclipseLink取回我的「comment.author.name」字段爲每一個評論,我從我的查詢得到。

回答

0

我已經解決了這個現在使用非標準的EclipseLink「LoadGroup」功能:

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

我正在尋找的標準解決方案,但。