2017-11-01 6 views
0

JPA Queryに問題があります。データベースはPostgresです。JPA | Loops through IDとUPDATE C

コラム:ID、ランク、名前

は私が1

等により複数の行を更新するいくつかのカウント値を渡すことによって、列の値を更新したいです

SQLクエリ入力の場合:

startRank:10

IDS:[2,3,5]

出力:

それはID 5

と行に、ID 3と12との列にID 2、11と行でランク10を更新する必要がありますそれがJPAでJavaを介して達成するのか、SQLで直接行うのか?

P.S. :以前は、準備されたステートメントを使用し、ループ内でクエリを作成し、実行のためにディスパッチしました。今JPAで私は方法を知らない。

+1

は、あなたの現在のコード例を追加します。.. –

+0

現在のコード例より明らかであろう。 表ストーリー持つフィールド ID、名前、ランク 私は私たちが更新する必要があるIDのリストを持っている(3,7,9など)とランク:16 だから私はクエリをフレームしたいJPAでID 3 7と9を反復し、ランク値16,17と18を設定します。また、接頭辞16、接頭辞17、接頭辞18に名前を変更する必要があります 最終出力はID "3"名前「プレフィックス-16」ランク「16」、ID「7」名前「プレフィックス-17」ランク「17」、ID「9」名前「プレフィックス-18」ランク「18」 –

答えて

0

私は私の質問の答えを得た:

我々はTransactional'inサービスクラス@注釈」を入れて、リポジトリに存在する方法を更新するために、サービスからループを実行し、これはJavaでエンティティオブジェクトを作成する必要があり、サービスメソッドの終了時に、作成されたすべてのエンティティをデータベースにプッシュします。

コードスニペット:

 @Transactional 
      void method(x){ 
//Given: Array id[] and rank 
      for (int i=0;i<x.size();i++){ 
          rank= rank+1 
          repository.update(id[i],rank); 
         } 
      } 

リポジトリ方式:

@Modifying(clearAutomatically = true) 
     @Query(value = "UPDATE stories " 
         + "SET rank = :rank, " 
         + "WHERE id = :storyId ;" ,nativeQuery = true) 
    void update(@Param("storyId") Integer storyId, @Param("rank") int rank); 
}