I have a code
{noformat} // entity is an Entity that contains OneToMany collections // I need this detach() for the following find() to provide me a managed entity that // contains the collections loaded. Otherwise, `loaded` still has the collections uninitialized. entityManager.detach(entity); final var entityType = entityManager.getMetamodel().entity(entity.getClass()); final var entityGraph = entityManager.getEntityGraph(entityType.getName()); final var loaded = entityManager.find( entity.getClass(), entity.getId(), Map.of( SpecHints.HINT_SPEC_LOAD_GRAPH, entityGraph, SpecHints.HINT_SPEC_CACHE_RETRIEVE_MODE, CacheRetrieveMode.BYPASS));{noformat}
I put in the workaround I had to do, but ideally it should either replace the {{entity}} with the newly loaded one since it’s managed already when I do the find with the entity graph hint.
But ideally I think [Allow passing in an entity graph on EntityManager.refresh · hibernate/hibernate-orm · Discussion #7152 (github.com)|https://github.com/hibernate/hibernate-orm/discussions/7152] would look cleaner.
Here is more context of my workaround [java - Hibernate: best practice to pull all lazy collections - Stack Overflow|https://stackoverflow.com/questions/19928568/hibernate-best-practice-to-pull-all-lazy-collections/76864391#76864391] |
|