0

我想拦截 JPA 调用(不接触实体类),因此需要 $subject?有没有人尝试过类似的东西。

4

2 回答 2

1

那里的每个容器都会创建一个代理 EM,因此您可以轻松查看 spring 或 glassfish 是如何做到的。在persistence.xml 中,您指定要使用的提供程序类,因此只需将其指向您的实现即可。

但是您可以使用 ORM.xml 文件添加事件侦听器 - JPA 允许添加适用于所有实体的默认侦听器,因此您无需触摸其中任何一个。在 JPA 尚未提供之后,您到底是什么?

于 2013-04-29T12:53:33.307 回答
1

您可以通过为文件中的所有实体指定默认实体侦听器来拦截 JPA 生命周期事件,例如“onPersist” orm.xml。无需触摸实体。例如:

class SomeListener { 
   @PrePersist
   private void prePersist(Object entity){
      //do some stuff before persisting the entity
   }

   @PostPersist
   private void postPersist(Object entity){
       //do some staff after persisting the entity
   }
}

<entity-mappings>
  <persistence-unit-metadata>
    <persistence-unit-defaults>
       <entity-listeners>
          <entity-listener class="SomeListener">
          <pre-persist method-name="prePersist"/>
          <post-persist method-name="postPersist"/>
        </entity-listener>
       </entity-listeners>
     </persistence-unit-defaults>
  </persistence-unit-metadata>
</entity-mappings
于 2013-04-29T12:59:23.687 回答