在级联删除时挂钩自定义操作

时间:2011-10-04 12:07:56

标签: java hibernate spring

一个简单的案例。用户有很多照片。当用户被删除时,他/她的所有照片也应该被删除(级联规则)。

但我希望能够在每张照片被删除之前执行一些自定义代码。

不幸的是,在删除用户时,我所做的只是调用userDAO.deleteUser(userID),因此不对照片采取任何特定操作(它们会被Hibernate本身删除)

另外,我真的不希望userDAO知道用户有照片,所以这个自定义代码应该插在其他地方。

我希望它能像我在实体类中创建一个OnDelete回调一样简单,但我在Hibernate文档中没有看到任何这样的规范

1 个答案:

答案 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