Spring-JPA-观察事件

Spring-JPA-观察事件,spring,jpa,Spring,Jpa,我希望观察实体何时被保存或删除,以便我可以执行与该实体相关的其他活动。我认为我过去没有在实体类本身上使用@EntityListeners注释,因为我的实体侦听器将在服务层实现,而不是在模型/数据层实现 我能想到的唯一其他方法是在persistence.xml中指定我的侦听器 有其他方法吗?我很久以前在一个很远很远的星系里做过这个,答案就在我的问题中 解决方案(我想要,但因为使用XML而不喜欢)是: 使用注释编写一个通用实体侦听器,并在spring中获取bean manager(CDI)的编程实例

我希望观察实体何时被保存或删除,以便我可以执行与该实体相关的其他活动。我认为我过去没有在实体类本身上使用@EntityListeners注释,因为我的实体侦听器将在服务层实现,而不是在模型/数据层实现

我能想到的唯一其他方法是在persistence.xml中指定我的侦听器


有其他方法吗?

我很久以前在一个很远很远的星系里做过这个,答案就在我的问题中

解决方案(我想要,但因为使用XML而不喜欢)是:

  • 使用注释编写一个通用实体侦听器,并在spring中获取bean manager(CDI)的编程实例或等效实例,然后触发一个事件,我可以通过CDI或spring处理该事件

  • 在我希望侦听器工作的地方,放置一个persistence.xml文件,并在那里手动指定实体侦听器

  • 如果我想做什么特别的事情,我只需观察我感兴趣的事件,就能得到我想要的信息

  • 有用吗?您可以尝试基于Spring AOP为自己构建一个层,或者您也可以检查[本文]()以几种方式实现审计。@AlanHay这实际上是我遇到的同一篇文章-我以为我的maven deps中已经有Spring starter,但找不到CreationEvent。我会再试一次,否则,那将是理想的。@andrei macarie这正是我试图避免的。我不想让监听器在实体类中,甚至实体在编译时知道。我想让它成为一个第三方库来进行观察。@WalterWhite我理解你不想用审计逻辑污染实体的观点。我认为,为了添加JPA映射、审计和任何其他需要添加的内容,您无法避免向实体添加几个注释。我这样说是因为在JAVA中,您无法创建一个能够流畅地表达实体配置的API——JAVA没有表达式树的概念。因此,您的最佳选择将是进入提供商级别。因此,如果您使用的是JPA+Hibernate,那么您可以在我发给您的文章中查看Hibernate ENVERS。