Spring JPA简单更新本机查询

问题描述

使用Spring Boot(v2.1.7.RELEASE),我为简单实体添加自定义存储库。

@Entity
@Table(name = "sample")
public class SampleEntity {
    
  @Id
  @Column(name = "id")
  protected UUID id;
  ...

  @Type(type = "jsonb")
  @Column(name = "eavs",columnDeFinition = "jsonb")
  private List<Eav> eavs;
        
  ...
}

我使用一个简单的JPARepository接口。

@Repository
public interface SampleEntity extends JpaRepository<SampleEntity,UUID> {
        
  @Modifying
  @Transactional
  @Query(value = "UPDATE sample SET eavs = CAST(?1 AS JSONB) WHERE id = ?2",nativeQuery = true)
  void updateEavs(String eavs,UUID id);

}

运行此更新查询时,完成(通过StopWatch)的总时间约为100毫秒。如果我通过远程PgAdmin服务器运行相同的查询,则返回的时间大致相同。不过,如果我使用EXPLAIN ANALYZE进行运行,它会显示查询实际上需要2毫秒才能执行。

Psql

DB=# UPDATE public.sample SET eavs='[]' WHERE id = '2f63d484-2bd4-4231-a056-f71a66b34473';
UPDATE 1
Time: 1.665 ms

PgAdmin:

Successfully run. Total query runtime: 160 msec.
1 rows affected.

什么解释了差异?该表有10行,查询执行时间看起来很高效,我以为JDBC获取连接,但是启用了登录服务,这花费了大约1ms的时间。没有其他活动的连接或锁。我在非JSONB列上尝试了相同的操作。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)