我在让CriteriaQuery加载ManyToOne关系而不明确告诉它时遇到了一些麻烦,而且必须在查询中复制我的实体注释以使其工作似乎很奇怪:
我有一个使用 JPA + Hibernate (hibernate-jpa-2.0-api) 的应用程序
我的实体Computer,除了其他字段包含关系:
@ManyToOne(fetch = FetchType.EAGER) @JoinColumn(name = "employee", nullable = false) private Employee employee = null;
据我所知,当我加载一个Computer实体时,与其相关的Employee应该自动加载到同一个查询中,但是,如果使用CriteriaQuery加载一个Computer,它就不会那样工作。也就是说,当我创建一个javax.persistence.criteria.CriteriaQuery并执行它时,我可以看到两个不同的查询:
- 一个取计算机
- 另一个来获取Employee(甚至在我使用它之前......也就是说,由于急切的注释,它似乎正在加载这个实体)
从我的角度来看,这应该在同一个查询中完成,但不知道该怎么做才能完成这项工作。如果我将“.fetch(”employee")”添加到条件查询中,它可以工作,但是这样我会在查询中复制实体中的配置,并且从维护的角度来看,这不是解决方案。
这种行为正常吗?可以修改吗?
谢谢