在PersistenceUnitUtil中使用isLoaded(Object)方法

时间:2014-07-23 19:50:43

标签: java hibernate jpa eclipselink jpa-2.0

我想知道调用方法PersistenceUnitUtil#isLoaded(Object)的原因是什么。

JPA Documentation说它可以帮助确定属于持久性单元的实体的负载状态,但它也提到

  

如果实体的所有属性都被视为已加载   已指定FetchType.EAGER已加载。

那么,有没有加载FetchType.EAGER的所有属性的情况?这些是什么?我只确定它适用于EntityManager#getReference()方法返回的实体。还有更多吗?

1 个答案:

答案 0 :(得分:0)

集成测试是其中一个很好的用途。如果您想确保在调用某个方法时,返回的任何内容都已加载了某些东西,这是一个很好的方法。

设置为使用export interface ReleaseModal { title:string, _links: { webui:string } id:number } getNotes(): Observable<ReleaseModal[]> { return this.http.get<any>(this.url); } 的关系有几种方法可能最终无法加载。

  1. 使用FetchType.EAGER时,如果将查询的提示指定为@NamedEntityGraph,则JPA提供程序应仅加载实体图中命名的关系。这与javax.persistence.fetchgraph之间的区别在于,javax.persistence.loadgraph使用它们已经拥有的任何提取类型来加载未在实体图中指定的关系。

    问题和我说提供程序“应该”仅加载那些关系的原因是,JPA规范允许提供程序始终加载超出规范要求的内容。具体来说,Hibernate会忽略fetchgraph的建议行为,并将其与loadgraph一样对待。

  2. 对于休眠条件查询,您可以使用setFetchMode()显式覆盖和设置任何关系的获取模式。我不知道其他提供商。

也许还有其他人?

啊,当我到处寻找更多细节时,我发现这已经在这里的另一个StackOverflow问题中被全部提及:

Ignore a FetchType.EAGER in a relationship