我怎样才能为 EntityManager.class 做一个拦截器
我想使用实体管理器审核插入、更新、删除等。为此,我如何为 EntityManager.class 制作一个与 EJB 一起使用的拦截器???
I want to audit insertions, updates, deletions, etc using entitymanager. For this, how could I do an interceptor for EntityManager.class that will work with EJB???
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您不需要为此添加拦截器,只需使用 JPA 的 回调方法 和/或 实体监听器。
使用第一种方法,您可以向使用以下注释之一声明的实体方法添加:
@PrePersist
、@PostPersist
、@PreUpdate
、@PostUpdate
、@PreRemove
、@PostRemove
或@PostLoad
。这些名称是不言自明的,这意味着对于每个事件(预持久、后持久等),都会调用带注释的方法。第二种方法类似,但这些方法是在一个或多个单独的类中实现的,然后使用 @EntityListeners 注释将这些类添加到实体中。
第二种方法更灵活,但无论哪种方式,您都可以在持久性操作发生之前/之后拦截它们并执行您需要的操作。
You don't need to add an interceptor for that, simply use JPA's callback methods and/or entity listeners.
With the first approach, you add to an entity methods declared with one of these annotations:
@PrePersist
,@PostPersist
,@PreUpdate
,@PostUpdate
,@PreRemove
,@PostRemove
, or@PostLoad
. The names are self-explanatory, meaning that for each event (pre-persist, post-persist, etc.) the annotated method gets called.The second approach is similar, but the methods are implemented in one or more separate classes, which in turn are added to the entity using the
@EntityListeners
annotation.The second approach is more flexible, but either way you can intercept persistence operation right before/after they occur and perform the operations you need.