微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在spring-jpa中使用JPQL删除2000条记录的最佳方法

如何解决在spring-jpa中使用JPQL删除2000条记录的最佳方法

如果在数据库表中,记录限制超过10000(10K),那么我需要使用JPA名称查询根据时间戳删除旧的2000(2K)。

下面是我的命名查询

@NamedQuery(name = FIND_COMMN_LOG_ID_BY_DEVICE_ID,query = "select entity.id from table1 entity where entity.deviceid =:deviceid ORDER BY recordedTime ASC"),@NamedQuery(name = DELETE_LOG_BY_DEVICE_ID_BASED_ON_TIMESTAMP,query = "delete from table1 entity where entity.id in (:IdList)")})

有这样的用法

List<Integer> list = entityManager.createNamedQuery(Constants.FIND_COMMN_LOG_ID_BY_DEVICE_ID)
    .setParameter("deviceid",deviceid)
    .setMaxResults(2000)
    .getResultList();

int count = entityManager.createNamedQuery(Constants.DELETE_LOG_BY_DEVICE_ID_BASED_ON_TIMESTAMP)
    .setParameter("IdList",list)
    .executeUpdate();

以上查询正在运行,但是我遇到了性能问题,删除2000条记录需要花费很多时间,并且服务器也崩溃了。

谁能有更好的简单快捷的方法删除2000条记录?

预先感谢!

解决方法

尝试类似的事情:

@NamedQuery(name = FIND_COMMN_LOG_ID_BY_DEVICE_ID,query = "select entity from table1 entity where entity.deviceId =:deviceId ORDER BY recordedTime ASC"),List entities = entityManager.createNamedQuery(Constants.FIND_COMMN_LOG_ID_BY_DEVICE_ID).setParameter("deviceId",id).execute(); 
entityRepository.deleteInBatch(entities); 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。