切入点实体加载/持久化JPA操作?

时间:2014-02-01 14:40:42

标签: java jpa aop aspect

我想在每次加载或持久化时包装/解包我的实体。我知道我不能使用JPA监听器,因为它们只能对对象执行操作而不能与其他对象交换。自然的解决方案是使用Aspect。但是我有什么特别方法可以切入点吗?问题是要包装/解包的实体可以是另一个实体的字段......

编辑:

我发现你不能使用Spring AOP执行此操作,因为EntityManager不是Spring管理的(为什么?) - 请参阅here。为了使它工作,我将必须明确定义EntityManager bean但不推荐在该帖子 - 再次,为什么?怎么办呢?另一方面,为什么他们声明创建的EntityManager是应用程序管理的?见spring API documentation

1 个答案:

答案 0 :(得分:0)

尝试切入使用实体类的getter和setter。从EntityManager中检索实体的方法,实现此目的的最佳方法是创建新的注释并放置可以检索该类的实例的所有方法,然后使用@annotation支持切入点:

  

@annotation - 限制匹配到连接点的主题   连接点(在Spring AOP中执行的方法)具有给定的   注释

同样要获得修改实体,你可以做这样的事情。

Get method arguments using spring aop?

有时您需要在建议正文中访问返回的实际值。您可以使用绑定返回值

的@AfterReturning形式