将 Envers 修订添加到现有且未经审计的 table

Add Envers revision to an existing and Not Audited table

我有一个 table,填充了一个导入文件。 现在我需要声明相关实体 AUDIT 并且我们已尝试通过这种方式创建用于在审计 Table 中插入 revinfo 的过程:

从数据库中提取最大 REV 和最大 RevTS

 @Query(value="select max(rev) from revinfo",nativeQuery=true)
 int findMaxRev();

 @Query(value="select max(revtstmp) from revinfo",nativeQuery=true)
 Long findMaxrevtstmp();

我们在这个数据上添加一个 +1 值,并尝试在这个查询中设置它:

@Query(value="insert into revinfo (`rev`, `revtstmp`) values (:rev, :revtstmp)", nativeQuery=true)
        void addRevInfo(@Param("rev") int rev, @Param("revtstmp")Long revtstmp);

@Query(value="insert into entity_h (id, audit_revision, action_type, audit_revision_end, audit_revision_end_ts ) "
    + "values (:id, :rev, 0, null, '2017-08-31 10:45:37')", nativeQuery=true)
    void addEnvers(@Param("id")long id, @Param("rev")int rev);

但是当我们运行 addRevInfo 查询时,我们得到这个错误:

`ERROR: org.hibernate.engine.jdbc.spi.SqlExceptionHelper - Can not issue data manipulation statements with executeQuery()`.

如果我们运行直接在MySQLWorkbench中进行同样的查询,插入运行没有问题。

怎么了?

尝试将此添加到您的插入查询中:

@Modifying(clearAutomatically = true)
@Query("....")

EntityManager 刷新您的更改,否则不会,并且它允许使用 executeUpdate() 而不是 exectueQuery() 适用于

the SQL statement, which returns a single ResultSet object

executeUpdate 改为

for SQL statement, which may be an INSERT, UPDATE, or DELETE statement or an SQL statement that returns nothing, such as an SQL DDL statement.