一个简单的案例。用户有很多照片。当用户被删除时,他/她的所有照片也应该被删除(级联规则)。
但我希望能够在每张照片被删除之前执行一些自定义代码。
不幸的是,在删除用户时,我所做的只是调用userDAO.deleteUser(userID),因此不对照片采取任何特定操作(它们会被Hibernate本身删除)
另外,我真的不希望userDAO知道用户有照片,所以这个自定义代码应该插在其他地方。
我希望它能像我在实体类中创建一个OnDelete回调一样简单,但我在Hibernate文档中没有看到任何这样的规范
答案 0 :(得分:-1)
然后我认为您需要在删除用户的功能上应用SPring AOP。
例如:
public void deleteUser(User user){
Session session = sessionFactory.getcurrentSection();
//delete the object
}
您需要做的是应用@Around
建议
@Pointcut("execution(* com.vanilla.dao.*.*(..))")
public void deleteUserMethods() { }
@Around("deleteUserMethods()")
public Object profile(ProceedingJoinPoint pjp) throws Throwable {
Object output = pjp.proceed();
///perform any operations on an pjp and its parameters.
return output;
}
我建议你看看这个例子:
http://veerasundar.com/blog/2010/01/spring-aop-example-profiling-method-execution-time-tutorial/
和Spring文档也非常有用:
http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/aop.html#aop-schema