Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 切入点实体加载/持久化JPA操作?_Java_Jpa_Aop_Aspect - Fatal编程技术网

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

Java 切入点实体加载/持久化JPA操作?,java,jpa,aop,aspect,Java,Jpa,Aop,Aspect,每次加载或持久化实体时,我都希望将其包装/展开。我知道我不能使用JPA监听器,因为它们只能对对象执行一个操作,而不能与另一个对象交换。自然的解决方案是使用方面。但是有没有特别的方法可以切入点呢?问题是要包装/展开的实体可以是另一个实体的字段 编辑: 我发现您不能使用Spring AOP来执行此操作,因为EntityManager不是Spring管理的(为什么?)-请参阅。为了让它工作,我必须明确地定义EntityManagerbean,但在那篇文章中不推荐它,为什么?怎么做呢?另一方面,他们为什

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

编辑:


我发现您不能使用Spring AOP来执行此操作,因为EntityManager不是Spring管理的(为什么?)-请参阅。为了让它工作,我必须明确地定义EntityManagerbean,但在那篇文章中不推荐它,为什么?怎么做呢?另一方面,他们为什么说创建的EntityManager是应用程序管理的?请参见尝试切入使用实体类的getter和setter。从EntityManager检索实体的方法,实现这一点的最佳方法是创建新注释,并覆盖所有可以检索该类实例的方法,然后使用@annotation support切入点:

@注释-将匹配限制为连接点,其中 连接点(SpringAOP中执行的方法)具有给定的 注释

另外,要获得修改实体,您可以执行以下操作


有时,您需要在通知正文中访问返回的实际值。您可以使用@AfterReturning的形式绑定返回值,这是我最初的方法。它的问题是实体暴露在其嵌套的对象内部。更重要的是,我认为SpringAOP不能做到这一点,因为它只在托管bean上工作。。。