如何仅在 spring 启动应用程序中生成 envers 模式?

How to only generate envers schema in a spring boot application?

我正在构建一个 spring 启动应用程序。在 src/main/resources 中,我有一个 schema.sql 文件,该文件将由 spring 自动执行以创建我的数据库模式。 最近我添加了使用 Hibernate envers 进行审计。当然,我不想在 schema.sql.

中手动添加 _AUD

使用像 h2 这样的嵌入式数据库,我可以简单地在 application.properties hibernate.hbm2ddl.auto=create-drop 中写入,以便自动生成表格。 切换到 "real" 数据库后,属性 已失效。此外 属性 只是方便使用,不推荐用于生产。

所以正确的解决方案是让hibernate 自动创建审计表。但是我该怎么做呢?我只想自动生成审计表的架构?

不幸的是,在涉及到 Hibernate 5 的模式管理功能时,来源 之间没有区别;这只是一个全有或全无的切换。

您可以考虑使用 Hibernate Tooling Schema Generation Ant 任务来生成架构创建脚本,然后手动修改它以满足您的需要。如果您无法找到一种方法将其注入您的 bootstrap 设置以供您首次执行,您甚至可能需要手动执行它。

好消息是,Hibernate 6 将引入一种方法,让您可以完全按照您的要求进行操作。您将能够允许将 Hibernate ORM 的实体指定为 validate,而审计 table 实体可以指定为 update 或任何其他设置。 Hibernate 6 模式管理工具将能够区分这些模式对象的不同来源,并以更独立的方式管理它们。

但是在 Hibernate 6 之前,您将不得不依赖工具任务来离线生成模式,并且可能会根据您的需要对这些脚本进行一些手动操作以包含在内。