diff --git a/jpa/entitygraph/src/main/java/org/javaee7/jpa/entitygraph/MovieBean.java b/jpa/entitygraph/src/main/java/org/javaee7/jpa/entitygraph/MovieBean.java index be07de51a..c96dae33e 100644 --- a/jpa/entitygraph/src/main/java/org/javaee7/jpa/entitygraph/MovieBean.java +++ b/jpa/entitygraph/src/main/java/org/javaee7/jpa/entitygraph/MovieBean.java @@ -4,7 +4,10 @@ import javax.persistence.EntityGraph; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; + +import java.util.HashMap; import java.util.List; +import java.util.Map; /** * @author Arun Gupta @@ -15,6 +18,13 @@ public class MovieBean { @PersistenceContext private EntityManager entityManager; + public Movie findMovieById(Integer movieId, String hint, String graphName) { + Map properties = new HashMap<>(); + properties.put(hint, entityManager.getEntityGraph(graphName)); + + return entityManager.find(Movie.class, movieId, properties); + } + public List listMovies() { return entityManager.createNamedQuery("Movie.findAll") .getResultList(); diff --git a/jpa/entitygraph/src/main/resources/META-INF/cache-persistence.xml b/jpa/entitygraph/src/main/resources/META-INF/cache-persistence.xml new file mode 100644 index 000000000..3d3423413 --- /dev/null +++ b/jpa/entitygraph/src/main/resources/META-INF/cache-persistence.xml @@ -0,0 +1,19 @@ + + + + + ALL + + + + + + + + + + + diff --git a/jpa/entitygraph/src/test/java/org/javaee7/jpa/entitygraph/EntityGraphCacheTest.java b/jpa/entitygraph/src/test/java/org/javaee7/jpa/entitygraph/EntityGraphCacheTest.java new file mode 100644 index 000000000..e641ca8cc --- /dev/null +++ b/jpa/entitygraph/src/test/java/org/javaee7/jpa/entitygraph/EntityGraphCacheTest.java @@ -0,0 +1,50 @@ +package org.javaee7.jpa.entitygraph; + + +import static org.junit.Assert.*; + +import java.util.List; + +import javax.inject.Inject; +import javax.persistence.EntityManager; +import javax.persistence.PersistenceContext; +import javax.persistence.PersistenceUnitUtil; + +import org.jboss.arquillian.container.test.api.Deployment; +import org.jboss.arquillian.junit.Arquillian; +import org.jboss.shrinkwrap.api.ShrinkWrap; +import org.jboss.shrinkwrap.api.spec.WebArchive; +import org.junit.Test; +import org.junit.runner.RunWith; + +@RunWith(Arquillian.class) +public class EntityGraphCacheTest { + + @PersistenceContext + private EntityManager entityManager; + @Inject + private MovieBean movieBean; + + @Deployment + public static WebArchive createDeployment() { + WebArchive war = ShrinkWrap.create(WebArchive.class) + .addPackage("org.javaee7.jpa.entitygraph") + .addAsResource("META-INF/cache-persistence.xml", "META-INF/persistence.xml") + .addAsResource("META-INF/create.sql") + .addAsResource("META-INF/drop.sql") + .addAsResource("META-INF/load.sql"); + System.out.println(war.toString(true)); + return war; + } + + @Test + public void testEntityGraphWithCache() throws Exception { + PersistenceUnitUtil persistenceUnitUtil = entityManager.getEntityManagerFactory().getPersistenceUnitUtil(); + + Movie movie = movieBean.findMovieById(1, "javax.persistence.fetchgraph", "movieWithActors"); + assertTrue("movieActors must be eagerly loaded", persistenceUnitUtil.isLoaded(movie, "movieActors")); + + movie = movieBean.findMovieById(1, "javax.persistence.fetchgraph", "movieWithActors"); + assertTrue("movieActors must be eagerly loaded when cached", persistenceUnitUtil.isLoaded(movie, "movieActors")); + } +}