2017-08-31 3 views
2

インポートファイルが格納されたテーブルがあります。 今私は、関連するエンティティAUDITを宣言する必要があり、我々はこのようで、監査表にrevinfoを挿入するための手順を作成しようとしている:Add既存の監査対象外のテーブルに改訂版を公開

DBから抽出最大REVとmax 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でこの同じクエリを直接実行すると、問題なく挿入が実行されます。

どういうところが間違っていますか?

答えて

2

クエリを挿入し、あなたにこれを追加しよう:

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

のEntityManagerは、そうでない場合は、変更をしませフラッシュ、およびそれが

the SQL statement, which returns a single ResultSet object

のために代わりexectueQuery()作品のexecuteUpdate()を使用することを許可することで代わりに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.

関連する問題