【发布时间】:2013-07-24 17:06:22
【问题描述】:
我对大型应用程序中的 EAGER 关系有疑问。此应用程序中的某些实体与其他实体有EAGER 关联。这在某些功能中成为“毒药”。
现在我的团队需要优化此功能,但我们无法将提取类型更改为 LAZY,因为我们需要重构整个应用程序。
所以,我的问题是:有没有办法在我返回的实体中忽略 EAGERs 关联来执行特定查询?
示例:当我有这个实体Person 时,我不想在查询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();
谢谢!
更新
我发现的唯一方法是不返回实体,只返回实体的一些字段。但我想找到一个可以返回实体的解决方案(在我的示例中,Person 实体)。
我在考虑是否可以在 Hibernate 中映射同一张表两次。这样,我可以在没有 EAGER 关联的情况下映射同一个表。这将在某些情况下对我有所帮助...
【问题讨论】:
-
也许你最好重构一下。通常,EAGER 只会用于琐碎的关系,如果那样的话。最好让一切都变得懒惰,然后在您真正知道自己需要它时获得额外的东西。
-
嗨@Nicholas!这是更好的解决方案。遗憾的是,不可能重构所有实体,因为这会对应用程序产生很大影响。
标签: java hibernate jpa hql jpql