我是 JPa / Hibernate 的新手。我们在我们的应用程序中使用 JPA 和休眠。目前我观察到对带有条件的表执行选择查询,休眠对每一行执行选择查询。
所以我的问题是,hibernate 如何对表执行搜索并检索记录?
我有一个场景,我需要查找活动用户并在活动用户列表上执行文件管理器,例如最近登录的用户、最受欢迎的用户(基于某些标准),例如我有 100 个活动用户,其中 20 个用户最近登录。 20 个用户最受欢迎。
如果我必须从数据库中获取记录,当我查询活动用户时,休眠执行 100 次选择操作。(使用表扫描)
如果我对最近和最受欢迎的用户执行 2 个单独的查询,休眠将执行 20 + 20 = 40 次选择操作。(但有 2 次表扫描)
那么hibernate如何从数据库中获取记录呢? 如果我与 jdbc 进行比较,我会说通过获得活跃的音高并对其执行过滤器,我将进行 1 次时间表扫描。
但是使用休眠它会执行更多的选择操作,并且当我为最近和最受欢迎的用户进行个人选择时,它会查询更少的选择,即使我进行了 2 次时间表扫描!
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "fk_profile_id", referencedColumnName = "pk_id")
private Profile Profile;
@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "investmentPitch", targetEntity = InvestmentType.class, orphanRemoval = true)
private List<InvestmentType> investmentType;
@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "investmentPitch", targetEntity = TabDetail.class, orphanRemoval = true)
private List<TabDetail> TabDetail;
@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "investmentPitch", targetEntity = Address.class, orphanRemoval = true)
private List<Address> Address;
@ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.DETACH)
@JoinTable(name = "pitch_sector", joinColumns = { @JoinColumn(name = "fk_id", nullable = false, updatable = false) }, inverseJoinColumns = { @JoinColumn(name = "fk_sector_id", nullable = false, updatable = false) })
private List<SectorMaster> sectors;