Spring boot 如何运行一次性脚本来操作jpa实体数据并保持对环境的跟踪?

Spring boot 如何运行一次性脚本来操作jpa实体数据并保持对环境的跟踪?,spring-boot,liquibase,hibernate-envers,Spring Boot,Liquibase,Hibernate Envers,我想在spring上运行一个一次性脚本来修改jpa实体,并希望这些更改显示在envers审计表上 我有一个spring引导应用程序,它使用envers跟踪一些JPA实体的更改。它正在使用liquibase为DDL更改运行数据库迁移 理想情况下,我希望脚本是java liquibase迁移,但是liquibase在spring上下文初始化之前运行,因此只能运行jdbc语句。一方面,我理解背后的原因,JPA应该在数据库建立后初始化;另一方面,我希望有一个类似于liquibase的系统,它跟踪已运行的

我想在spring上运行一个一次性脚本来修改jpa实体,并希望这些更改显示在envers审计表上

我有一个spring引导应用程序,它使用envers跟踪一些JPA实体的更改。它正在使用liquibase为DDL更改运行数据库迁移

理想情况下,我希望脚本是java liquibase迁移,但是liquibase在spring上下文初始化之前运行,因此只能运行jdbc语句。一方面,我理解背后的原因,JPA应该在数据库建立后初始化;另一方面,我希望有一个类似于liquibase的系统,它跟踪已运行的脚本,并在spring上下文初始化后查找新脚本


在这种情况下,我可以使用什么或最好的方法,有什么建议或想法吗?

您的脚本最终可以做两件事

  • 模式迁移
  • 数据迁移
  • 对于模式迁移,没有任何东西可以阻止脚本将必要的模式更改应用到envers审计表,就像它对JPA实体映射所做的那样。这可能是最好的方法,因为表结构应该保持同步,因此以相同的物理方式迁移,因此将该行为集中在相同的位置只会有助于这些操作的长期管理

    对于数据迁移来说,这是一个完全不同的游戏

    Envers严重依赖Hibernate事件侦听器框架来捕获Envers审计模式中的更改,因此任何绕过或不生成此类事件的内容都将丢失。因此,如果您希望捕获这些操作,您需要通过ORM执行这些操作,或者自己手动插入事件

    在Hibernate6中,将有一个新特性,您可以在更细粒度的级别上控制它自己的模式迁移功能。例如,您可以说ORM表永远不会更新,也许这就是您对这些表使用Liquibase的地方,但是您可以显式地将Envers对象标记为始终更新。但是请记住,Hibernate的模式迁移有一些限制


    我确实对如何改善这一切有一些长期的想法,但我还不能具体分享。我上面所描述的是目前可用的或一般的操作程序。

    感谢@Naros的回答,并对我的迟来回复表示抱歉。我认为我的案例属于数据迁移范畴。如果我的经验对其他人有所帮助,我最终使用SpringDataREST为管理员用户公开Rest服务,管理员用户可以运行脚本,利用生成的API对数据执行所需的更改,同时相应地更新Envers表。