HibernateException:非法尝试在调用session.update()时将集合与两个打开的会话相关联

时间:2013-05-27 12:00:40

标签: java hibernate hibernate-mapping

我有一个表与许多其他表关联,具有一对一或一对多的关系。使用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)

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

有人能说出这里可能出现的问题吗?

1 个答案:

答案 0 :(得分: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>

弹簧JPA-config.xml中

<bean name="openSessionInViewInterceptor"
        class="org.springframework.orm.hibernate4.support.OpenSessionInViewInterceptor">
        <property name="sessionFactory" ref="sessionFactory" />
</bean>
你使用@Transactional? - 也可以创建新会话。