【发布时间】:2021-04-13 14:27:27
【问题描述】:
我这里的代码很慢。它所做的只是收集具有特定实体列的所有行。
List<Data> slectedData = dataService.findByJobNameOrderByDateTime(selectJob.getValue().getName());
List<Data> deleteThese = slectedData.subList(firstIndex - 1, lastIndex);
for (List<Data> deleteTheseLists : Lists.partition(deleteThese, 2000)) {
dataService.deleteInBatch(deleteTheseLists);
}
然后我创建一个sub list 并且我想删除该子列表。
但是子列表可能非常大,然后dataService.deleteInBatch(deleteTheseLists); 会占用大量时间。
entity 类 Data 如下所示:
@Entity
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
public class Data {
// ID
@Id
@GeneratedValue
private long id;
// Made by
private String jobName;
private String calibrationName;
@Column(columnDefinition = "DATETIME(3)")
private LocalDateTime dateTime;
// Analog input
private float sa0;
private float sa1;
private float sa1d;
}
我想删除dateTime。这在 Spring Boot JPA 中可能吗?
因为我无法在id 上删除,因为id 键在数据库中的索引不正确,因为有时数据库需要很长时间才能插入数据,有时速度很快。所以删除JPA中的entities是一种非常不安全的方式。
【问题讨论】:
-
最快的选项似乎是使用
EntityManager和Query。 objectdb.com/java/jpa/query/jpql/delete#Selective_Deletion -
@RoarS。下面的答案够好吗?
-
两个都试了,选了符合要求的那个
-
@RoarS。从这个页面找到查询示例baeldung.com/jpa-limit-query-results
-
@RoarS。我想我现在知道了
SELECT jobName FROM Data ORDER BY dateTime LIMIT min, max;,其中min是我的开始,max是从min计算的总行数。
标签: java spring spring-boot jpa spring-data-jpa