我有一个表,填充了一个导入文件。
现在我需要声明相关实体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中运行同一个查询,那么插入运行没有问题。
出了什么问题?
答案 0 :(得分:2)
尝试将此添加到您插入查询:
@Modifying(clearAutomatically = true)
@Query("....")
使用EntityManager刷新您的更改,否则不允许使用executeUpdate()
代替exectueQuery()
工作
SQL语句,它返回单个ResultSet对象
而executeUpdate则是
表示SQL语句,可以是INSERT,UPDATE或DELETE语句 或者什么都不返回的SQL语句,例如SQL DDL 言。