当前位置: 首页 > 知识库问答 >
问题:

JPA+Hibernate:CriteriaQuery未加载急切的ManyToOne关系

霍书
2023-03-14

让CriteriaQuery加载多对一个关系而不明确地告诉它,我遇到了一些麻烦,而且要在查询中复制我的实体注释来使其工作,这似乎很奇怪:

除其他字段外,“我的实体计算机”包含以下关系:

@ManyToOne(fetch=FetchType.Eage)@JoinColumn(name=“Employee”,nullable=false)private Employee=Null;

据我所知,当我加载一个计算机实体时,与它相关的Employee应该自动加载到同一个查询中,但如果使用CriteriaQuery加载一台计算机,它就不是这样工作的。也就是说,当我创建一个javax.persistence.Criteria.CriteriaQuery并执行它时,我可以看到两个不同的查询:

    null

共有1个答案

景修杰
2023-03-14

FetchType.Eager意味着链接的实体必须与根实体同时被提取,但是JPA规范并没有说明执行此操作的策略(即,使用一个或两个查询是留给持久性提供程序实现的一种选择)。

Hibernate提供了注释@fetch(fetchmode.join),该注释指示Hibernate通过一个查询来获取两个实体,因此您可以使用它来满足需要(但它不是标准的JPA注释)

 类似资料:
  • 我通过提示检查了它在EclipseLink中的工作情况: 这个链接http://blog.ringerc.id.au/2012/06/jpa2-is-very-inflexible-with-eagerlazy.html暗示通过Hibernate是不可能的,建议手动获取。但是,我无法理解如何通过HQL或标准来实现它,特别是如何获得不在实体上但仅存在于数据库上的child.parent_id列。即避

  • 我见过几个类似的问题有0个好答案。 这应该非常简单。我正在使用 Java JPA,有时想要加载子实体列表,但不是所有时间。不幸的是,当我说要懒惰地获取它时,JPA似乎没有听我的话。我已经 100% 确定在我的代码中没有任何地方以任何方式访问 childEntities 属性。但是,在我的 JPA.em(.)查找(.)调用时,所有子实体仍然会立即加载。这就是我如何声明与注释的关系。 我是这样加载父实

  • 我有一个JAX-RS资源类。它调用一个加载实体的无状态EJB(我们称之为)。 与另一个实体具有关系(我们称之为),并且配置为具有的提取类型。 任何东西上都不会出现额外的事务性注释,因此无状态EJB的默认行为是在必要时启动事务,并在事务的业务方法完成后提交事务。 在调试器中,我观察到EJB返回的将作为的值,正如我所怀疑的那样。因此,惰性加载工作良好。 然后,我的资源类构建一个并将控制权交给JAX-R

  • 我有3个模型 1-书: 2-用户 3-书签用户 bookuser迁移: 我试图得到所有的书籍与喜欢的只是当前的用户: 这是我得到的: 我如何访问数据透视表...或者如何得到那样的??我正在尝试,但id不起作用

  • 我对雄辩的质询有意见。我正在使用渴望加载(一对多多态关系)来排序“historyable”。日期见下文。 我试着得到这样的结果 是否有可能运行嵌套懒惰渴望加载Laravel? 产品型号 历史模型 产品控制器 我有这样的数据库

  • 我想添加创建者字段到我的所有实体的授权目的。以前我有一个OneToOne关系从每个实体到用户实体,但现在我看到它添加了约束到该表,最终用户不能创建一个以上的记录这确实是,但问题是,你必须添加一个相应的字段到用户为每一个实体你创建。数字类型和左连接每次获取用户是获取,但增加了太多的维护负担。所以,在TypeORM中是否有任何内置的解决方案来添加一个字段创建者到我的实体与用户类型,也有选项急切加载它在