Перехват пользовательских действий при каскадном удалении - PullRequest
1 голос
/ 04 октября 2011

Простой случай. У пользователя много фотографий. При удалении пользователя все его фотографии также должны быть удалены (правило каскадов).

Однако я хочу иметь возможность выполнить какой-то пользовательский код непосредственно перед удалением каждой фотографии.

К сожалению, при удалении пользователей все, что я делаю, это вызываю userDAO.deleteUser (userID), поэтому никаких конкретных действий с фотографиями не предпринимается (они удаляются самой Hibernate)

Кроме того, я не хочу, чтобы userDAO знал, что у пользователя есть фотографии, поэтому этот пользовательский код должен быть вставлен в другое место.

Хотелось бы, чтобы это было так же просто, как обратный вызов OnDelete, когда я комментирую свои классы сущностей, но я не видел такой спецификации в документах Hibernate

1 Ответ

0 голосов
/ 04 октября 2011

Тогда я думаю, что вам нужно применить SPring AOP к функции, которая удаляет пользователя.

, например:

public void deleteUser(User user){
Session session = sessionFactory.getcurrentSection();
//delete the object

}

Что вам нужно сделать, это применить @Around advice

 @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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...