我在Google App Engine上使用JPA(而不是JDO),这是我的服务方法的典型示例:
@Autowired
EntityManagerFactory entityManagerFactory;
public Collection<Message> getAll() {
EntityManager em = entityManagerFactory.createEntityManager();
Collection<Message> result = null;
try {
Query query = em.createQuery("SELECT e FROM Message e");
result = query.getResultList();
//The workaround
//if(result != null) result.size();
} finally {
em.close();
}
return result;
}
当我尝试在方法之外使用集合时,我收到“着名”错误,报告对象管理器已关闭。调用size()方法是一种解决方法,但我不喜欢这种“脏”的解决方案。我想知道没有任何方法可以将此集合分离或延迟加载禁用。
答案 0 :(得分:2)
我不知道它是否是&#34; clean&#34;,但是经常推荐的方法是让一个servlet过滤器在代码运行之前创建一个线程本地的EntityManager并在它关闭它端。
答案 1 :(得分:1)
如果您正在使用spring(如您所示),OpenEntityManagerInViewFilter是将EntityManager公开给视图的“正确”方式,从而允许在视图中延迟获取持久集合。
答案 2 :(得分:0)
使用GAE JPA插件的v2;不能简单得多
答案 3 :(得分:0)
使用Guice JPA插件,不能简单得多。