Java 持久异常

Java PersistentException

我正在使用 Java 和 ORM,我得到了 PersistentException:

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

我有以下代码:

    public boolean Añadir_video_a_historial(Usuario_Registrado_BD user, Video_BD video) throws PersistentException{
    Boolean res = false;

    PersistentTransaction t=ventanas.Actividad10PersistentManager.instance().getSession().beginTransaction();
    try {

        Historial_BD historial = user.getTiene_un();

        if(historial.contiene.size() < 10){
            if(historial.contiene.contains(video)){
                historial.contiene.remove(video);
                historial.contiene.add(video);
            }else{
                historial.contiene.add(video);
            }
        }else{
            while(historial.contiene.size() >= 10){
                Video_BD[] listaV = historial.contiene.toArray();
                historial.contiene.remove(listaV[0]);
            }

            historial.contiene.add(video);
        }

        res = Historial_BDDAO.save(historial);

        t.commit();
    }catch(Exception e) {
        t.rollback();
    }
    return res;

}

我不知道为什么我会得到这个异常,最后我会提交或回滚。错误在 "res = Historial_BDDAO.save(historial);" 行,此代码由 Visual Paradign 自动生成。我有另一种方法,它们都具有相同的结构。我做错了什么?

这个问题是由于 Historial_BD 对象和 Video_BD 对象在不同的​​会话中加载造成的。要解决此问题,您应该从同一会话加载两个对象。即使用基于应用程序的会话,它为您的应用程序提供单个会话,或使用基于线程的会话并从同一线程加载对象。

或者,您可以使用锁定或使用其 ID 从当前会话重新加载对象。