查询以更新Spring / Hibernate项目上的许多记录

时间:2018-02-01 14:23:19

标签: java spring postgresql hibernate

我有一个spring项目,我正在使用Hibernate和JpaRepository。现在我想同时对许多记录进行更新,我有一个id地图和一个要更新的字段。记录量是可变的,因为它取决于请求。这不是真正的ORM级别,而是较低级别。我该怎么办呢?我是Spring和Hibernate的新手,所以,我不知道应该用哪个API来解决这个问题。

我将数据作为Map<UUID, Integer>获取,我想将其转换为一组查询值,如下所示:Update multiple rows in same query using PostgreSQL。基本上我正在进行批量更新。

1 个答案:

答案 0 :(得分:1)

过去我遇到过类似的情况,我不明白为什么不混合jpa和jdbc技术,这些技术确实是为这类任务而设计的。甚至还为您配置了jdbc模板&#34; free&#34;如果您使用spring boot并添加spring-boot-starter-jdbc依赖项,例如(来自春天documentation

public class JdbcActorDao implements ActorDao {

    private final JdbcTemplate jdbcTemplate;

    public int[] batchUpdate(final List<Actor> actors) {
        return this.jdbcTemplate.batchUpdate(
            "update t_actor set first_name = ?, last_name = ? where id = ?",
            new BatchPreparedStatementSetter() {
                public void setValues(PreparedStatement ps, int i) throws SQLException {
                    ps.setString(1, actors.get(i).getFirstName());
                    ps.setString(2, actors.get(i).getLastName());
                    ps.setLong(3, actors.get(i).getId().longValue());
                }
                public int getBatchSize() {
                    return actors.size();
                }
            });
    }
}