将 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.
我有一个 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.