基本上我有一个大的实体与许多懒惰加载的集合:我没有使用过eclipselink,但是我知道在Hibernate中你可以做到:Hibernate.initialize(entity);它将初始化实体。有类似的东西与eclipselink?目前我正在做:entity.collection.size()来强制初始化...但是如果我不必对所有的属性都这样做的话会很好。
Hibernate.initialize(entity);
entity.collection.size()
mbskvtky1#
对这样的方法的需求较少--加载到EclipseLink中的实体只要没有被序列化就保持到其会话的连接,因此在大多数情况下可以在事务作用域之外加载。JPA通过定义EntityGraph并将其指定为loadgraph来实现这一点。然后,提供程序负责遍历对象,并确保实体中的所有内容都按照给定的EntityGraph加载。这允许您进行更细粒度的控制,并可以加载实体内部的深层关系。有一些教程比我所能展示的更好。也许可以看https://www.baeldung.com/jpa-entity-graph或https://www.javacodegeeks.com/2014/11/jpa-entity-graphs.html。与initialize的主要区别是,您需要从实体中提取主键,并将其与loadgraph提示一起传递给findById方法,以便它为您加载内容。即:
Map<String, Object> hints = new HashMap(); hints.add("javax.persistence.loadgraph", entityManager.getEntityGraph(graphName)); Entity loadedEntity = entityManager.findById(Entity.class, id, hints);
1条答案
按热度按时间mbskvtky1#
对这样的方法的需求较少--加载到EclipseLink中的实体只要没有被序列化就保持到其会话的连接,因此在大多数情况下可以在事务作用域之外加载。
JPA通过定义EntityGraph并将其指定为loadgraph来实现这一点。然后,提供程序负责遍历对象,并确保实体中的所有内容都按照给定的EntityGraph加载。这允许您进行更细粒度的控制,并可以加载实体内部的深层关系。
有一些教程比我所能展示的更好。也许可以看https://www.baeldung.com/jpa-entity-graph或https://www.javacodegeeks.com/2014/11/jpa-entity-graphs.html。与initialize的主要区别是,您需要从实体中提取主键,并将其与loadgraph提示一起传递给findById方法,以便它为您加载内容。即: