我想知道调用方法PersistenceUnitUtil#isLoaded(Object)
的原因是什么。
JPA Documentation说它可以帮助确定属于持久性单元的实体的负载状态,但它也提到
如果实体的所有属性都被视为已加载 已指定FetchType.EAGER已加载。
那么,有没有加载FetchType.EAGER
的所有属性的情况?这些是什么?我只确定它适用于EntityManager#getReference()
方法返回的实体。还有更多吗?
答案 0 :(得分:0)
集成测试是其中一个很好的用途。如果您想确保在调用某个方法时,返回的任何内容都已加载了某些东西,这是一个很好的方法。
设置为使用export interface ReleaseModal {
title:string,
_links: {
webui:string
}
id:number
}
getNotes(): Observable<ReleaseModal[]> {
return this.http.get<any>(this.url);
}
的关系有几种方法可能最终无法加载。
使用FetchType.EAGER
时,如果将查询的提示指定为@NamedEntityGraph
,则JPA提供程序应仅加载实体图中命名的关系。这与javax.persistence.fetchgraph
之间的区别在于,javax.persistence.loadgraph
使用它们已经拥有的任何提取类型来加载未在实体图中指定的关系。
问题和我说提供程序“应该”仅加载那些关系的原因是,JPA规范允许提供程序始终加载超出规范要求的内容。具体来说,Hibernate会忽略fetchgraph的建议行为,并将其与loadgraph一样对待。
对于休眠条件查询,您可以使用setFetchMode()
显式覆盖和设置任何关系的获取模式。我不知道其他提供商。
也许还有其他人?
啊,当我到处寻找更多细节时,我发现这已经在这里的另一个StackOverflow问题中被全部提及: