0

我有一个表,它与许多其他表相关联,要么具有一对一关系,要么具有一对多关系。使用 更新这些表时session.update(Parent_Table),出现以下异常。

org.hibernate.HibernateException:非法尝试将集合与两个打开的会话相关联

更新方法:

public static String update(ParentTable table)  throws Exception {      
    Session session = HibernateUtil.getSessionFactory().getCurrentSession();
    try {
        session.beginTransaction();
        session.update(table);
        session.getTransaction().commit();
        return success;
    } catch (Exception e) {
        session.getTransaction().rollback();
        e.printStackTrace();
        return failure;
    }
}

在这里,我添加新的子记录并使它们与父表关联或修改现有的父或子记录并将父表传递给session.update(table).

不知道如何创建两个不同的会话。即使我在更新语句之前关闭现有会话并打开一个新会话,也会得到相同的异常。

有人可以建议这里可能出了什么问题吗?

4

1 回答 1

0

您使用什么框架和容器?什么版本?

你用这样的东西吗?:

 <filter>
  <filter-name>OSIV</filter-name>
  <filter-class>org.springframework.orm.hibernate4.support.OpenSessionInViewFilter</filter-class>
 </filter>
 <filter-mapping>
  <filter-name>OSIV</filter-name>
  <url-pattern>/*</url-pattern>
 </filter-mapping>

spring-jpa-config.xml

<bean name="openSessionInViewInterceptor"
        class="org.springframework.orm.hibernate4.support.OpenSessionInViewInterceptor">
        <property name="sessionFactory" ref="sessionFactory" />
</bean>

你使用@Transactional?- 也可以创建新会话。

于 2013-05-27T12:12:40.577 回答