繁体   English   中英

在PersistenceUnitUtil中使用isLoaded(Object)方法

[英]Usage of isLoaded(Object) method in PersistenceUnitUtil

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

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

如果已为其指定了FetchType.EAGER的所有属性均已加载,则认为该实体已加载。

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

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

设置为使用FetchType.EAGER的关系可能有几种方法最终无法加载。

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

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

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

也许还有其他人?

嗯,当我在寻找更多详细信息时,我发现这已经在这里的另一个StackOverflow问题中被全部提及:

忽略关系中的FetchType.EAGER

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM