0
我正在开发一个Vaadin webapp使用JPAContainer与休眠4.3。 我按照这个link的指示,成功地实现了EntityManager-per-Request模式。这意味着懒加载适用于JPAContainerVaadin休眠会话错误
但是,每次我需要使用纯JPA时,它都无法延迟加载。
下面是一个例子代码:
try {
entityManagerProvider.getEntityManager().getTransaction().begin();
List<SubEntity> subEntitiesList = myEntity.getCollectionOfEntities(); //Fails to load
for (SubEntity subEntity : subEntitiesList) {
subEntity.doSomething();
entityManagerProvider.getEntityManager().merge(subEntity);
}
entityManagerProvider.getEntityManager().flush();
entityManagerProvider.getEntityManager().getTransaction().commit();
} catch (Exception ex) {
entityManagerProvider.getEntityManager().getTransaction().rollback();
}
//datasource is JPAContainer<MyEntity> type
datasource.removeItem(index);
我已经试过这样的解决方案:
使用hibernate.enable_lazy_load_no_trans 它自动打开的会话,但它给了一个严重警告:
“无法关闭临时会话用于加载与无会话关联的延迟收集”
此外,当我删除从JPAContainer实体,我收到一个错误:org.hibernate.PersistentObjectException:通过分离的实体坚持
能有人给我如何处理这个问题的一些提示?
谢谢何塞!好的答案!最后一个问题:使用第二种方法,如果我使用em.getReference而不是em.find,该怎么办? – guilhermecgs 2014-10-17 13:22:37
@guilhermecgs这很好,特别是如果你只想初始化一些属性。 – 2014-10-18 09:37:05