【问题标题】:Spring - JPA - observe eventsSpring - JPA - 观察事件
【发布时间】:2017-09-09 20:21:41
【问题描述】:

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

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

还有其他方法吗?

【问题讨论】:

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

标签: spring jpa


【解决方案1】:

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

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

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

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

  3. 如果我想做一些特别的事情,我只需观察我感兴趣的事件并获得我想要的信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-15
    • 2015-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-12
    • 1970-01-01
    相关资源
    最近更新 更多