【问题标题】:Is there way to fetch queries with Hibernate session.get()?有没有办法使用 Hibernate session.get() 获取查询?
【发布时间】:2019-10-01 04:24:22
【问题描述】:

我正在使用 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();

【问题讨论】:

    标签: java hibernate fetch


    【解决方案1】:

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

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

    【讨论】:

    • 感谢您的回复。有没有办法通过一个查询来获取它们,而无需点击另一个查询来获取 Tax 数据,例如 Fetch join ?
    • 我认为不会使用标准或 HQL。您可能可以使用 Native SQL 查询来做到这一点,而无需将其与您的实体进行映射(您必须明确地使用 RowMapper)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-26
    • 1970-01-01
    • 1970-01-01
    • 2014-02-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多