【问题标题】:Add Envers revision to an existing and Not Audited table将 Envers 修订添加到现有且未审核的表
【发布时间】:2017-08-31 09:18:13
【问题描述】:

我有一个表格,里面有一个导入文件。 现在我需要声明相关实体AUDIT,我们尝试创建一个用于在审计表中插入 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 中运行同样的查询,插入运行没有问题。

怎么了?

【问题讨论】:

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


    【解决方案1】:

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

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

    这样,EntityManager 不会刷新您的更改,并且它允许使用 executeUpdate() 而不是 exectueQuery()

    返回单个 ResultSet 对象的 SQL 语句

    executeUpdate 是

    用于 SQL 语句,可以是 INSERT、UPDATE 或 DELETE 语句 或不返回任何内容的 SQL 语句,例如 SQL DDL 声明。

    【讨论】:

      猜你喜欢
      • 2020-08-02
      • 1970-01-01
      • 2021-09-03
      • 2015-09-20
      • 2018-08-09
      • 2013-03-10
      • 1970-01-01
      • 1970-01-01
      • 2019-08-20
      相关资源
      最近更新 更多