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 从当前会话重新加载对象。
我正在使用 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 从当前会话重新加载对象。