Spring,AOP-如何在Hibernate DAO事务关闭后定义方面

Spring,AOP-如何在Hibernate DAO事务关闭后定义方面,spring,hibernate,transactions,aspectj,dao,Spring,Hibernate,Transactions,Aspectj,Dao,我的项目是带有Spring和Hibernate的Web应用程序。我需要对DAO层返回的数据执行一些常规操作,事务被提交,会话被关闭。我尝试将方面与注释一起使用,如下所示: @AfterReturning(pointcut = "execution(* com.dao..*.*(..))", returning = "result") public void afterReturning(JoinPoint joinPoint, Object result){ processResult(

我的项目是带有Spring和Hibernate的Web应用程序。我需要对DAO层返回的数据执行一些常规操作,事务被提交,会话被关闭。我尝试将方面与注释一起使用,如下所示:

@AfterReturning(pointcut = "execution(* com.dao..*.*(..))", returning = "result")
public void afterReturning(JoinPoint joinPoint, Object result){
    processResult(result);
}
或使用

@Around("execution(* com.dao..*.*(..))")
但在这两种情况下,我都遇到了如下Hibernate异常: org.hibernate.transientObject异常:对象引用未保存的临时实例-在刷新之前保存临时实例

当然,如果我在我的服务中应用相同的操作,一切都会正常工作:

public void serviceMethod(Object param) {
    Object result = dao.getObject(param);
    processResult(result);
}

'因为我需要对每个DAO方法的结果使用processResult,我不愿意使用后一种方法,如果您能就如何使用aspect或其他替代方法提供一些建议,我将不胜感激。…

在aspect上添加一个order注释,并使其在事务内部执行,您也应该给出一个订单(这是
上的一个属性。