我在使用 CriteriaQuery 加载 ManyToOne 关系时遇到一些麻烦 明确告诉它,不得不复制我的实体注释似乎很奇怪 在查询中使这项工作:
我有一个使用JPA + Hibernate的应用程序(hibernate-jpa-2.0-api)
我的实体计算机,除了其他字段外还包含以下关系:
@ManyToOne(fetch = FetchType.EAGER) @JoinColumn(name =“employee”,nullable = false) private Employee employee = null;
据我所知,当我加载计算机实体时,与它相关的 Employee 应该自动加载到同一个查询中,但如果加载使用 CriteriaQuery 的计算机,它不会那样工作。也就是说,当我创建 javax.persistence.criteria.CriteriaQuery 并执行它时,我可以 看到两个不同的查询:
从我的角度来看,这应该在同一个查询中完成,但不知道如何使其工作。如果我将“。fetch(”employee“)”添加到 criteriaquery ,它可以正常工作,但这样我在我的查询中复制实体中的配置,并从从维护的角度来看,这不是一个解决方案。
这种行为是正常的吗?可以修改吗?
由于
答案 0 :(得分:1)
FetchType.EAGER意味着必须在根实体的同时获取链接实体,但是jpa规范没有说明执行此操作的策略(即使用一个或两个查询是留给持久性的选择)提供者实施)。
Hibernate提供注释@Fetch(FetchMode.JOIN)
,指示hibernate使用一个查询获取两个实体,因此您可以使用它来实现需要(但它不是标准的JPA注释)