JPA |循环遍历id和UPDATE C列表

时间:2017-11-01 10:58:20

标签: mysql sql postgresql jpa postgis

我遇到了JPA Query的问题。数据库是Postgres。

我想通过传递一些计数值来更新列值,这将使多行更新1。

例如:

表A

列:Id,排名,名称

对于sql查询输入是

startRank:10

ids:[2,3,5]

输出:

它应该在id为2的行更新排名10,在id为3的行更新11,在id为5的行更新。

请建议它是通过Java在JPA中实现还是直接在sql中实现?

P.S。 :以前我使用预处理语句并在循环中构建查询并将其分派执行。现在在JPA,我不知道如何。

1 个答案:

答案 0 :(得分:0)

我得到了我的问题的答案:

我们需要在服务类中添加注释'@Transactional'并运行从服务到存储库中存在的更新方法的循环,这将在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);
}