如何使用 EntityListener 进行 Flyway 迁移?

问题描述 投票:0回答:1

我只是需要一个答案来解释为什么它不起作用,并在不可能的情况下寻找替代方案。

我正在使用实体侦听器注释,它可以帮助我捕获数据库表更改周围的事件,在其中触发我的“业务事物”。

代码示例:

@EntityListeners(MyClassEntityListener.class)
@Entity
public final class EntityClass {
  //... attribs. here
}

public class MyClassEntityListener {
  @PostUpdate
  @PostPersist
  void onUpdate(EntityClass entityClass) {
    // ... business here -> this is not called with flyway migrations
  }
}

Flyway 迁移示例:

insert into entity_class (uuid, ...) values
('c8297c38-04e4-48ed-afb6-070c8d994d54', ...);

如果我通过控制器使用 API 作为 hibernate 创建/更新实体并且在那里使用事务,那么一切都会正常工作。对于飞路迁移,这是行不通的 - 创建了一行并且不调用侦听器。简单的问题是为什么以及如何制定解决方法。

我不想使用 Flyway 回调,因为一个迁移文件可以包含许多新实体,并且我需要为每个实体调用 onchange/onupdate 回调。

我使用mysql作为数据库和flyway版本

8.5.0
,springboot版本
2.7.3
java 17

java spring-boot flyway entitylisteners
1个回答
0
投票

JPA 将管理您的

EntityListeners
。 Flyway迁移SQL脚本将使用数据库连接并将SQL发送到数据库,JPA不会意识到这一点。您可能想看看Flyway迁移文档关于基于Java的迁移部分,其中您可以组装应用程序的相关部分以使实体监听器工作,然后使用JPA来操作您的数据库内容。祝你好运!

© www.soinside.com 2019 - 2024. All rights reserved.