首页 > 解决方案 > 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 个对象比对象列表慢。

标签: javahibernatejpa

解决方案


推荐阅读