我在大型应用程序中遇到EAGER关系问题.此应用程序中的某些实体EAGER与其他实体有关联.这在某些功能中变成了"毒药".
现在我的团队需要优化这些功能,但我们不能将获取类型更改为LAZY,因为我们需要重构整个应用程序.
所以,我的问题:是否有办法在我返回的实体中忽略EAGERs关联来执行特定查询?
示例:当我有这个实体Person时,我想在查询人员时不带地址列表.
@Entity
public class Person {
@Column
private String name;
@OneToMany(fetch=FetchType.EAGER)
private List<String> address;
}
Query query = EntityManager.createQuery("FROM Person person");
//list of person without the address list! But how???
List<Person> resultList = query.getResultList();
Run Code Online (Sandbox Code Playgroud)
谢谢!
更新
我找到的唯一方法是不返回实体,只返回实体的某些字段.但我想找到一个可以返回实体的解决方案(在我的例子中,Person实体).
我在想是否可以在Hibernate中将同一个表映射两次.通过这种方式,我可以在没有EAGER关联的情况下映射同一个表.在一些情况下,这对我有帮助......
我目前正处于从Hibernate切换到纯JPA 2的过程中(顺便说一下,这比我最初期望的要长得多).
到目前为止,我遇到的最大问题是找到一种方法来强制加载懒惰属性.
使用Hibernate,这是使用:criteria.setFetchMode("person", FetchMode.JOIN);.
有没有办法用JPA 2做到这一点?