我正在使用 JPA 1、Struts2.3.1、Google-App-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