Java JPA&x2B;Hibernate:CriteriaQuery未加载渴望的多工单关系

Java JPA&x2B;Hibernate:CriteriaQuery未加载渴望的多工单关系,java,hibernate,jpa-2.0,Java,Hibernate,Jpa 2.0,我在创建标准查询加载多通关系时遇到了一些问题,没有 显式地告诉它,复制实体注释似乎很奇怪 在执行此操作的查询中: 我有一个使用JPA+Hibernate的应用程序(Hibernate-JPA-2.0-api) 除其他字段外,“我的实体计算机”包含以下关系: @manytone(fetch=FetchType.EAGER) @JoinColumn(name=“employee”,nullable=false) 私人雇员=空 据我所知,当我加载一个计算机实体时,与它相关的员工应该自动加载到同一个查

我在创建标准查询加载多通关系时遇到了一些问题,没有 显式地告诉它,复制实体注释似乎很奇怪 在执行此操作的查询中:

  • 我有一个使用JPA+Hibernate的应用程序(Hibernate-JPA-2.0-api)

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

    @manytone(fetch=FetchType.EAGER) @JoinColumn(name=“employee”,nullable=false) 私人雇员=空

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

    • 一个人去拿电脑
    • 另一个用于获取Employee(甚至在我使用它之前..也就是说,它似乎正在加载此实体,因为有急切的注释)
在我看来,这应该在同一个查询中完成,但不知道该怎么做才能使其工作。如果我将“.fetch”(“employee”)”添加到标准查询中,它会起作用,但这样我会在查询中的实体中复制配置,从维护的角度来看,这不是一个解决方案

这种行为正常吗?可以修改吗


感谢

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


Hibernate提供注释
@Fetch(FetchMode.JOIN)
,该注释指示Hibernate通过一个查询获取两个实体,因此您可以使用该注释来实现所需的功能(但它不是标准的JPA注释)

我已经对此进行了测试,但不起作用。我现在再试了一次,但即使删除了另一个fetch值,它也不起作用。也许这与使用“entityManager.getCriteriaBuilder()”在构建查询时忽略该注释有关…但在后面的步骤中考虑它们。。。