背景:
比如我要删除Person的一个对象。但是Person关联了其他表。主表,在hibernate中表示为一的一段。
因为数据有关联的,不能删除成功,但不能报错。我分析了执行过程,因为执行了delete方法之后没有马上发出sql语句,不会报出异常,返回了true。当延迟到展示层的时候,才发出sql。
hibernate的工具类。使用filter来管理事务的关闭和开启和session的关闭
[code="java"]
public boolean delete (Object object){
boolean result = false;
session = getSession();
try{
session.delete(object);
result = true;
}catch(Exception e){
e.printStackTrace();
log.error("HibernateUtil.delete( )", e);
return false;
}
return result;
}
[/code]
Action类伪代码
[code="java"]
Person person = hibernate.findPersonById(2);
if(hibernate.delete(person)){
out.print("成功")
}else{
out.print("失败")
}
[/code]
此时,person是有关联的。在数据库工具中直接执行sql会报错。但在这里不会报错。调试的执行过程如下、
在Action中,代用delete方法,进入delete方法,执行session.delete(object),没有发出sql,返回了true。那么action中就执行了 out.print("成功")。然后再出发sql。
以上结果方法是。查询到person。然后判断person是否有关联。然后再决定是否删除。规定不能采用级联
[code="java"]
Set roles =person.getRoles();
if(roles.isEmploy){
if(hibernate.delete(person))
out.print("成功")
else
out.print("失败")
}
[/code]
这并不是一个好的办法可是有的时候在编写的过程中忘记判断是否有关联。
以上的问题怎么解决呢?我想在执行delete的时候,就提示有关联。前提是,使用filter管理事务,不采用jdbc。