2012-06-12 20 views
5

使用JPA EntityManager和JPA Query对象,如何重写某些注释@OneToMany(fetch = FetchType.EAGER)以在查询中延迟获取?如何在运行时重写FetchType.EAGER以使其延迟

如果我有hibernate查询对象,我可以让它创建一个条件对象并使用它,将获取类型设置为懒惰。但是我必须使用JPA查询对象。有没有解决这个问题的方法?

+0

是的,你可以 - http://stackoverflow.com/questions/4388486/fetchmode-in-jpa-2-criteriaquery –

+0

看到这个:http: //stackoverflow.com/questions/17847289/ignore-a-fetchtype-eager-in-a-relationship。 – Dherik

回答

4

即使使用原生Hibernate API,也无法做到这一点。如果一个关联被定义为EAGER,它总是被急切地加载,并且没有办法改变使用查询的方式。

反过来是不正确的:您可以使用查询热切加载一个惰性关联。

+0

该死的。谢谢,是的,我一直在使用HQL中的fetch-keyword来做到这一点。 – hugelgupf

-1

查看Hibernate获取配置文件或JPA实体图。这个问题已经在2012年问你问题了。

+0

这个问题还没有解决,请参阅:https://hibernate.atlassian.net/browse/HHH-8776 - 即使使用EntityGraphs也不可能忽略EAGER加载。 –

+0

啊,我的歉意,无视我的答案。典型的用例是相反的 - 将你的实体标记为懒惰提取,并使用实体图在运行时更改提取类型。我不知道HHH-8776,很高兴知道,谢谢。 – mancini0