我怎么能为EntityManager.class做一个拦截器

joa*_*vio 2 java ejb jpa entitymanager

我想使用entitymanager审核插入,更新,删除等.为此,我怎么能为EntityManager.class做一个可以使用EJB的拦截器???

Ósc*_*pez 7

您不需要为此添加拦截器,只需使用JPA的回调方法和/或实体侦听器.

与第一种方法,您添加到这些注释的一个声明的实体的方法:@PrePersist,@PostPersist,@PreUpdate,@PostUpdate,@PreRemove,@PostRemove,或@PostLoad.这些名称是不言自明的,这意味着对于每个事件(pre-persist,post-persist等),都会调用带注释的方法.

第二种方法类似,但方法在一个或多个单独的类中实现,而这些类又使用@EntityListeners注释添加到实体.

第二种方法更灵活,但无论哪种方式,您都可以在它们发生之前/之后拦截持久性操作并执行您需要的操作.

  • 保证在数据库更新的某个时刻调用`@ PreUpdate`.为了存储先前的值,在`@ PostLoad`中将当前值保存在同一实体的另一个属性中; 当执行`@PreUpdate`时,"旧"值将存在,并且"新"值将在该点处的实体的通常属性中. (2认同)
  • 你可以在`orm.xml`文件的`persistence-unit-defaults`中添加一个`entity-listener`元素,(见[here](http://docs.jboss.org/hibernate/orm/4.0/)下摆/ EN-US/HTML/listeners.html#d0e3102)).除此之外,还没有编写自己的`EntityManager`,不,你不能拥有`EntityManager`类的拦截器. (2认同)