如何使用 Spring Roo gvnix Audit 保存每条记录的历史记录

How to save history of each record using Spring Roo gvnix Audit

我想在 Employee table 中保存我的 My Employee 详细信息,在 EmployeeHistory table 中保存历史详细信息 在 运行 下面的命令之前,我可以将记录保存在我的员工 table 中,但不能保存在员工历史记录中 table jpa 审核修订日志 --provider H-ENVERS

在 运行 上面的命令之后我无法保存员工 table 我也收到这样的错误 org.hibernate.engine.jdbc.spi.sqlexceptionhelper - 无效的对象名称 RevisionLogEntity

我的log.roo

project --topLevelPackage com.employeedetails --projectName EmployeeDetails
jpa setup --database MSSQL --provider HIBERNATE --hostName Hostname --databaseName dbname --userName sa --password Admin@123!!
database introspect --schema dbo --file db_schema
database reverse engineer --schema dbo --package ~.domain --includeTables "Employee"
web mvc setup
web mvc all --package ~.web
web mvc scaffold --class ~.web.EmployeeController --backingType ~.domain.Employee
web mvc scaffold --class ~.web.EmployeeListController --backingType ~.domain.Employee --path employeelist

web mvc finder all
web mvc jquery setup
web mvc jquery all
web mvc datatables setup
web mvc bootstrap setup
jpa gvnix setup
jpa batch all
web mvc batch setup
web mvc batch all
web mvc datatables add --type ~.web.EmployeeListController --mode show
security setup
web mvc bootstrap update
jpa audit setup
jpa audit revisionLog --provider H-ENVERS
jpa audit all --package ~.domain.audit

我看到您正在使用逆向工程来生成您的模型。您是否创建了 Hibernate Envers 存储修订信息所需的 table?

Hibernate Envers 需要一个新实体 RevisionLog 来存储有关存储在数据库中的所有修订(日期、用户等)的一般信息,并且每个审计的实体需要一个 table 来存储实体实例值每次修订。

gvNIX 为您创建此配置,但是,由于您使用的是逆向工程工具,因此 hibernate.hbm2ddl.auto 属性 应设置为 none。因此,所需的 Envers tables 将不会在 DB 上生成。

一个简单的解决方案可能是:

  1. 创建临时空数据库
  2. 配置您的项目以使用它
  3. hibernate.hbm2ddl.auto设置为create
  4. 启动应用程序:Hibernate hbm2ddl 将生成所需的 tables
  5. 停止应用程序
  6. 根据时态数据库的定义在原始数据库中创建所有环境table
  7. 恢复项目中的 DB 和 hbm2ddl 设置

有关 Envers 的更多信息,请查看 development guide

祝你好运!

P.D.: 下次执行时不要忘记从逆向工程配置中排除 envers tables!。