我有一个表与许多其他表关联,具有一对一或一对多的关系。使用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)
。
不知道如何创建两个不同的会话。即使我在更新语句之前关闭现有会话并打开一个新会话,也会获得相同的异常。
有人能说出这里可能出现的问题吗?
答案 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? - 也可以创建新会话。