進出口使用JPA 1,Struts2.3.1,谷歌應用程序內,Enging 1.7.0訪問父實體
在我的漫畫我有下面的getter和setter屬性:
@ManyToOne(fetch=FetchType.LAZY, targetEntity=User.class)
private User user = null;
我JPA的查詢方法:
public Comics readComics(int random, String url){
EntityManager em = EMF.get().createEntityManager();
Comics comics = null;
try{
Query q = em.createNamedQuery("Comics.getComics");
q.setParameter("random", random);
q.setParameter("url", url);
comics = (Comics) q.getSingleResult();
} catch(NoResultException ex){
System.out.println("ERROR CATCHED: " + ex.getMessage());
comics = null;
} finally{
em.close();
}
return comics;
}
在我看來,我有:
<s:property value="comics.user.userName"/>
userName
在這種情況下無法訪問,但是當實體管理器未關閉時,會顯示userName
。
什麼是正確的?可以刪除em.close()
嗎?
=======================
使用BeanUtils.copyProperties
我也試過下面的代碼:
Comics emComics = (Comics) q.getSingleResult();
BeanUtils.copyProperties(comics, emComics);
BeanUtils.copyProperties(comics.getUser(), emComics.getUser());
是它使用copyProperties
的正確方法?刪除BeanUtils.copyProperties(comics.getUser(), emComics.getUser());
將再次不顯示user
謝謝。即時通訊使用datanucleus。我無法使用連接,因爲它在Google-App-Engine中被限制。 –
是克隆對象好嗎? –
是的,最好使用類似推土機或BeanUtils的東西。您可能遇到的一個問題是選擇需要複製哪些關係 - 您可能必須創建不同的類(VO DTO)才能返回與UI匹配的輸出,然後從域對象複製到這些類。 – gkamal