我正在使用Hibernate 5 Criteria Builder Queries来获取Criteria Queries。但是,当调用session.get()时,SQL在调用它们时会为相关的Hibernate实体创建多个查询。有没有一种方法可以像Hibernate Criteria Query Fetching那样通过一个查询来获取它们。

CriteriaQuery<AdvanceRecieved> advanceCriteria = builder.createQuery(AdvanceRecieved.class);
Root<AdvanceRecieved> advanceRoot = advanceCriteria.from(AdvanceRecieved.class);

advanceRoot.fetch(AdvanceRecieved_.department,JoinType.LEFT);


我使用fetch()提取了这些实体,但是我没有在下面的代码示例中找到用于提取的示例。

ItemsABS selectedItem = jpaSess.get(ItemsABS.class, dealer.id);
Set<Tax> itemtaxes = selectedItem.getTaxEligibility();

最佳答案

您正在看到多个查询,因为ItemsABSTAX实体之间可能存在一对多关系。因此,当您请求ItemsABS数据时,默认情况下它将获取附加的引用(即TAX数据),因此会为此触发多个查询。

如果只需要ItemsABS数据,则在获取LAZY LOADING数据时可能必须使用ItemsABS
可以使用@OneToMany(fetch = FetchType.LAZY)在实体级别定义

07-25 22:45