我在大型应用程序中遇到EAGER关系问题。此应用程序中的某些实体与其他实体具有关联关系EAGER
。这在某些功能上变成了“毒药”。忽略关系中的FetchType.EAGER
现在我的团队需要优化这个功能,但我们不能将获取类型更改为LAZY,因为我们需要重构整个应用程序。
所以,我的问题:有没有办法做了具体的查询忽略了我返回实体EAGERs关联?
例子:当我有这个实体的人,我想,当我做一个查询,以找到一个人不把地址列表。
@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();
谢谢!
更新
我发现没有返回的实体,只返回实体的一些领域的唯一途径。但我想找到一个解决方案,我可以返回实体(在我的例子中,Person
实体)。
我想,如果能够在Hibernate中映射两次在同一个表。这样,我可以映射没有EAGER关联的同一张表。这将帮助我在少数情况下...
http://stackoverflow.com/questions/10997321/how-to-override-fetchtype-eager-to-be-lazy-at-runtime?lq=1 –
也许你最好重构。通常情况下,EAGER只能用于微不足道的关系。最好是让所有的东西都懒惰,然后在你真正知道你需要的时候获得额外的东西。 –
嗨@尼古拉斯!这是更好的解决方案。可悲的是,它不可能重构所有实体,因为在应用程序中有很多影响。 – Dherik