【问题标题】:Automatically call method in each JPA transaction在每个 JPA 事务中自动调用方法
【发布时间】:2019-03-29 09:10:06
【问题描述】:

我想在每次事务启动时调用一个方法(调用 Postgres 函数)。

我不确定从哪里开始,但我正在使用 JpaTransactionManager。

【问题讨论】:

  • JPA 只是一个规范,您使用的是特定的实现,例如 Hibernate。该实现将有一种添加侦听器的方法,以便您可以挂钩到事务的生命周期。
  • 请参阅 hear 了解 Spring 支持挂钩到事务生命周期的概述。 stackoverflow.com/questions/23651464/…

标签: java spring jpa transactions


【解决方案1】:

我的方法是:

通过将所有调用委托给隐藏的 JPATransactionManager 本地实例来创建一个替换 JPATransactionManager 的类。 这个类还可以提供注册观察者的可能性。 当配置你的 Spring-Container 使用这个新类而不是 JPATransactionManager 时,所有的 begin Transaction-Calls 都应该通过它进行路由。

根据 Transaction-Object 的解决方案,如果您想确保捕获所有 begin 调用,您也可以为 TransactionManager 返回的 transaction-object 创建一个委托,并由您的 TransactionManager 返回此委托-代表。

【讨论】:

    【解决方案2】:

    最好的方法是使用面向方面的编程 (AOP)。 AOP 将帮助您编写一次方法并定义一个切入点。 什么是 AOP?你可以阅读What's AOP?

    【讨论】:

      猜你喜欢
      • 2018-08-31
      • 1970-01-01
      • 2019-05-17
      • 1970-01-01
      • 2019-05-04
      • 2021-08-28
      • 2011-09-23
      • 1970-01-01
      • 2018-05-24
      相关资源
      最近更新 更多