jpa 是否有等价于Hibernate.initialize的eclipselink?

hivapdat  于 2023-03-03  发布在  Eclipse
关注(0)|答案(1)|浏览(109)

基本上我有一个大的实体与许多懒惰加载的集合:我没有使用过eclipselink,但是我知道在Hibernate中你可以做到:Hibernate.initialize(entity);它将初始化实体。有类似的东西与eclipselink?目前我正在做:entity.collection.size()来强制初始化...但是如果我不必对所有的属性都这样做的话会很好。

mbskvtky

mbskvtky1#

对这样的方法的需求较少--加载到EclipseLink中的实体只要没有被序列化就保持到其会话的连接,因此在大多数情况下可以在事务作用域之外加载。
JPA通过定义EntityGraph并将其指定为loadgraph来实现这一点。然后,提供程序负责遍历对象,并确保实体中的所有内容都按照给定的EntityGraph加载。这允许您进行更细粒度的控制,并可以加载实体内部的深层关系。
有一些教程比我所能展示的更好。也许可以看https://www.baeldung.com/jpa-entity-graphhttps://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);

相关问题