我只是需要一个答案来解释为什么它不起作用,并在不可能的情况下寻找替代方案。
我正在使用实体侦听器注释,它可以帮助我捕获数据库表更改周围的事件,在其中触发我的“业务事物”。
代码示例:
@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
。
JPA 将管理您的
EntityListeners
。 Flyway迁移SQL脚本将使用数据库连接并将SQL发送到数据库,JPA不会意识到这一点。您可能想看看Flyway迁移文档关于基于Java的迁移部分,其中您可以组装应用程序的相关部分以使实体监听器工作,然后使用JPA来操作您的数据库内容。祝你好运!