【问题标题】:How to override FetchType.EAGER to be lazy at runtime如何覆盖 FetchType.EAGER 在运行时变得懒惰
【发布时间】:2012-06-15 08:59:05
【问题描述】:

使用 JPA EntityManager 和 JPA Query 对象,我如何覆盖具有注释 @OneToMany(fetch = FetchType.EAGER) 以在查询中延迟获取的内容?

如果我有休眠查询对象,我可以让它创建一个条件对象并使用它,将获取类型设置为惰性。但我必须使用 JPA 查询对象。这个问题有解决办法吗?

【问题讨论】:

标签: java hibernate jpa persistence


【解决方案1】:

即使使用本机 Hibernate API,也无法做到这一点。如果关联被定义为 EAGER,它将总是被急切地加载,并且无法使用查询来更改它。

反之则不然:您可以使用查询急切地加载惰性关联。

【讨论】:

  • 该死的。谢谢,是的,我一直在使用 HQL 中的 fetch-keyword 来做到这一点。
【解决方案2】:

查看 Hibernate Fetch 配置文件或 JPA 实体图。自从您在 2012 年提出该问题后,此问题已得到解决。

【讨论】:

  • 这尚未解决,请参阅:hibernate.atlassian.net/browse/HHH-8776 - 即使使用 EntityGraphs 也无法忽略 EAGER 负载。
  • 抱歉,请忽略我的回答。典型的用例是相反的 - 将您的实体标记为延迟获取,并使用实体图将获取类型更改为在运行时急切。我不知道 HHH-8776,很高兴知道,谢谢。
猜你喜欢
  • 1970-01-01
  • 2019-05-19
  • 1970-01-01
  • 2010-11-29
  • 2020-07-30
  • 1970-01-01
  • 2013-03-20
  • 2021-08-12
  • 1970-01-01
相关资源
最近更新 更多