将Envers修订添加到现有和未审核的表

时间:2017-08-31 09:18:13

标签: java mysql spring spring-data-jpa hibernate-envers

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

从DB中提取最大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中运行同一个查询,那么插入运行没有问题。

出了什么问题?

1 个答案:

答案 0 :(得分:2)

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

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

使用EntityManager刷新您的更改,否则不允许使用executeUpdate()代替exectueQuery()工作

  

SQL语句,它返回单个ResultSet对象

而executeUpdate则是

  

表示SQL语句,可以是INSERT,UPDATE或DELETE语句   或者什么都不返回的SQL语句,例如SQL DDL   言。