我遇到了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,我不知道如何。
答案 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);
}