当前位置: 首页 > 知识库问答 >
问题:

Vaadin中的Hibernate会话错误

易宏阔
2023-03-14

我正在使用JPAContainer和Hibernate4.3开发一个Vaadin webapp。我遵循了这个链接的说明,成功地实现了EntityManager-per-Request模式。这意味着惰性加载可以很好地用于JPAContainer

但是,每次我需要使用纯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);

另外,当我从JPAContainer中移除实体时,我会收到一个错误:org.hibernate.PersistentObjectException:将分离的实体传递到Persister

有没有人能给我一些如何处理这个问题的提示?

共有1个答案

束雅达
2023-03-14

我看到两种方法。

将分离实体的更改合并到数据

只需合并实体并对托管值进行操作即可。

Entity managed = em.merge(entity);

for (SubEntity sub : managed.getSubEntities()) {
    sub.doSomething();
}
Entity managed = em.find(entity.getClass(), entity.getId());
entity.setSubEntities(managed.getSubEntities());
// initialize lazy collections and collection elements
JpaUtils.initialize(em, entity, 2);
 类似资料:
  • Vaadin7会话超时有几个问题。首先,即使我尝试将heartbeatinterval更改为20秒,Vaadin debug仍然说它是默认值300秒。 另一个问题是,除了通信错误消息之外,我根本无法获得会话超时消息。无论会话是1分钟还是2分钟,或者比heartbeatinterval更长的时间都无关紧要。 第三个问题是,在通信错误消息中总是有“无效的JSON-response from serve

  • 我有一个问题发生在我坐在空闲的时候,没有接触网络浏览器,vaadin在点击vaadin应用程序中的任何内容之后,就会抛出红色的通信问题错误消息。 我已经通过30分钟不接触浏览器进行了测试。之后,当我单击vaadin应用程序中的一个按钮时,它会抛出通信错误消息。 我有两个应用服务器,它们位于Rackspace的负载均衡器后面。我还启用了“粘性会话”... vaadin可能有自己的超时吗?

  • 我在学习冬眠时遇到了一个问题。我写了UnitTest和那里我尝试添加对象到DB。所有选择都正常工作,但插入不正常。 我也尝试过这样的东西 它引发了一个异常,事务没有成功启动,但它添加了用户 这里有一个例外 组织。springframework。交易TransactionSystemException:无法回滚Hibernate事务;嵌套的异常是org。冬眠TransactionException:

  • 1. 前言 本节课程将和大家一起聊聊 Hibernate 的核心组件之一: Session 对象。 通过本节课程,你将了解到: 创建 Session 对象的 2 个方法; 线程上下文的作用。 2. 创建 Session 对象 Session 是 Hibernate 的重要组件之一,是交给开发者的一把利剑。开发者可使用 Session 对象提供的增、删、改、查(Crud)等方法实现基础的数据操作。

  • 1. 前言 Hibernate 的核心价值观是:开发者们!做你们应该做的。脏的、累的、没技术含义的由本尊来做。 本节课和大家一起好好的聊聊 Hibernate 的核心组件之一:会话工厂(SessionFactory)。 通过本节课,你将学习到: 会话工厂的设计要求; 会话工厂的核心功能。 2. 会话工厂的作用 原生 Jdbc 开发如同自己炒菜做饭,需经手买菜、洗菜、做菜……一系列过程。 基于 Hi

  • 是否可以限制会话和与之相关的请求可以使用的内存量? 例如,我希望将每个用户会话限制为一兆字节。此限制应适用于处理请求时创建的任何对象。有可能吗?