gpt4 book ai didi

java - JPA+ hibernate : CriteriaQuery not loading eager ManyToOne relation

转载 作者:行者123 更新时间:2023-12-01 14:03:43 25 4
gpt4 key购买 nike

我在使 CriteriaQuery 加载 ManyToOne 关系时遇到了一些麻烦,但没有明确地告诉它,必须复制我的实体注释似乎很奇怪在查询中以使其工作:

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

  • 我的实体计算机,除了其他字段包含关系:

    @ManyToOne(fetch = FetchType.EAGER)@JoinColumn(name = "员工", nullable = false)私有(private)员工员工 = null;

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

    • 用于获取计算机
    • 另一个用于获取Employee(甚至在我使用它之前......也就是说,由于急切的注释,它似乎正在加载此实体)

从我的角度来看,这应该在同一个查询中完成,但不知道该怎么做才能完成这项工作。如果我将 ".fetch("employee")" 添加到 criteriaquery 中,它就可以工作,但这样我就可以在查询中复制实体中的配置,并且从从维护的角度来看,这不是一个解决方案。

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

谢谢

最佳答案

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

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

关于java - JPA+ hibernate : CriteriaQuery not loading eager ManyToOne relation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19110970/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com