如何解决在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条记录需要花费很多时间,并且服务器也崩溃了。
预先感谢!
解决方法
尝试类似的事情:
@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 举报,一经查实,本站将立刻删除。