2016-09-28 20 views
0

目的:主キーの指定されたリストによって、同じテーブルの一部の列を更新し、行の更新は、クエリ(ネイティブではない)が成功か否スプリングデータJPA更新複数の行

であるかどうかを示すためにINT []順序付け返す:

update MyEntity e set e.col_1 = :v1, e.col_2 = :v2 where e.id in :ids 

スプリングデータJPA方法:

@Modifying(clearAutomatically = true) 
@Transactional 
public int updateCols(@Param("v1") String v1, @Param("v2") String v2, @Param("ids") List<Long> idList); 

スプリングJpaTransactionManagerが使用さ

質問:1)Spring Data JPAのみで、どのように行うのですか? (既存のコードが大容量であるため、リポジトリをカスタマイズすることはできません)、SpringデータJPAのみを使用したJDBCバッチ更新と同等の効果を達成したいと考えています。

2)バンプデータJAPは、入力リストのサイズより小さい上記の更新メソッドによって整数を返す可能性はありますか?それが起こる可能性がある場合は、私の入力リストのどれが失敗したかをどのように知るのですか?どんな順序で?

3)上記の方法が正常に終了した後、データベース行がまったく更新されないことに気付きました。どのように春データjpaでデータベースに同期させることができますか?

4)バネデータJPAでエンティティ更新をフラッシュしないと、バッチではなく1つずつ更新されますが、データベースの変更は表示されません。 ありがとうございます

答えて

0

私は行の複数のセットを更新するために "in"を使用します。

iがuser_Recordは=電子メールを設定するクエリ更新使用:更新データ用の( "+ ID +")のidのunameを表に

CREATE TABLE user_record ( ID VARCHAR(50) NOT NULL COLLATE 'utf16_bin', メールVARCHAR(255) NULL DEFAULT NULL COLLATE 'utf16_bin', VARCHAR(255) NULL DEFAULT NULL COLLATE 'utf16_bin', PRIMARY KEY ( ID ) )

@RequestMapping(value = "/updateSums/{id}", method = RequestMethod.GET) 
public String updateFew(@PathVariable String id ,Model model) 
{ 
    EntityManager em = entityManagerFactory.createEntityManager(); 
    id= id.replace(",", "','"); 
    id= "'"+id+"'"; 
    em.getTransaction().begin(); 
    System.out.println(); 
    em.createNativeQuery("update user_Record set email= :uname where id in ("+id+")", UserRecord.class) 
      .setParameter("uname", "[email protected]") 
      .executeUpdate() 
      ; 

    em.getTransaction().commit(); 

    return "user_one"; 
} 
USER_DATAを

terminal log in this pic

あなたのためにうまくいきますように! !

0

まず、AFAIK Spring Data JPAは単独では存在できません。それは、裸のJPAをベースにした単なるものです。 Hibernateや他のJPAプロバイダをフードの下で使用する必要があります。

https://github.com/colonder/Spring-Hibernate-JavaFX-Invoices

私のリポジトリを見てください。それは、Hibernate + Spring Boot + Spring Data JPA + Java FX 8ですが、少し助けてくれると思います。私のレポはMVCのパターンに従っており、あなたと同じようにSpringのトランザクションマネージャを使います。質問3と4に関しては、AFAIK Hibernate(私の場合、Spring Data JPAがプロバイダとして使用するものなので)はアプリケーションではなく、DBの行を更新します。問題は、DB内の更新された行がアプリで表示されず、反対ではないことです。

関連する問題