java - Hibernate - JPA 提取查询需要很长时间才能完成
问题描述
我使用 JPA 和 Hibernate 进行了 2 个不同的调用。第一次调用需要很多时间来执行(大约 5 分钟),并且它只获取一个对象,这是在 JPA 存储库上进行的自定义查询。
第二个在大约 10 秒内获取上述相同对象的列表。
第一个查询:
Optional<MachineGroupToVersion> omgtv = machineGroupToVersionService.getByVersionNameAndMachineGroupId(versionName, machineGroupId);
public Optional<MachineGroupToVersion> getByVersionNameAndMachineGroupId(String versionName, long machineGroupId) {
return machineGroupToVersionRepository.findByVersionNameAndMachineGroupId(versionName, machineGroupId);
}
第二个查询:
List<MachineGroupToVersion> omgtv = machineGroupToVersionService.getByMachineGroupName(machineGroupName);
public List<MachineGroupToVersion> getByMachineGroupName(String mgName) {
List<MachineGroupToVersion> mgtvl = new ArrayList<>();
Optional<MachineGroup> mg = machineGroupService.getByName(mgName);
if(mg.isPresent()){
mgtvl = machineGroupToVersionRepository.findByMachineGroup(mg.get());
}
return mgtvl;
}
MachineGroupToVersion 类
public class MachineGroupToVersion {
@Id
@GeneratedValue(strategy= GenerationType.AUTO, generator = "machine_groups_to_versions_seq")
@SequenceGenerator(name = "machine_groups_to_versions_seq", allocationSize = 1)
@Column(name = "id")
private long id;
@ManyToOne
@JoinColumn(name = "machine_group_id", nullable = false)
private MachineGroup machineGroup;
@ManyToOne
@JoinColumn(name = "version_id", nullable = false)
private Version version;
@Column(name = "state")
private String state;
@Column(name = "tested_time")
private Date testedTime;
@Column(name = "creation_time")
private Date creationTime;
}
我无法理解的是:如何获取单个对象需要更长的时间来执行然后获取相同对象的列表?
我应该提一下,在 MachineGroupToVersion 类中,大部分字段都是 EAGERLY 获取的,虽然我知道这是导致查询执行缓慢的原因,但我试图弄清楚为什么获取 1 个对象比对象列表慢。
解决方案
推荐阅读
- python - 快速分组点的方法
- python - 在数组上使用 .join 时删除单引号(Python)
- reactjs - 如何在打字稿中打印反应组件?
- apache - 用于主机名的 Apache HTTP RewriteRule
- python - 如何在我的 Tkinter 程序中限制用户的连接?
- csv - 在 unix 系统上的 csv 文件中删除引号内的返回插入符号
- java - CompletableFuture.runAsync 是否有任何线程限制
- spring - 实体@OneToOne 映射中的重复列应映射为 insert="false" update="false"
- python - python - gc.collect() 不起作用。我该如何解决?
- discord.py - 带有用户令牌的 fetch_message(id)