[ https://issues.apache.org/jira/browse/OPENJPA-1920?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12995878#comment-12995878 ]
Rick Curtis commented on OPENJPA-1920: -------------------------------------- Ignore my previous comment, I wasn't running the correct scenario. > N+1 select with entities that contain Maps (even with FetchType.EAGER) > ---------------------------------------------------------------------- > > Key: OPENJPA-1920 > URL: https://issues.apache.org/jira/browse/OPENJPA-1920 > Project: OpenJPA > Issue Type: Improvement > Components: kernel > Affects Versions: 2.0.0 > Reporter: Vermeulen > > When I have an entity that contains a Map, e.g.: > @Entity > public class TestEntity { > @ElementCollection(fetch = FetchType.EAGER) > Map<String, String> strings = new HashMap<String, String>(); > } > And I select all existing entities > String query = "SELECT z FROM " + > TestEntity.class.getSimpleName() > + " z"; > List<TestEntity> result = em.createQuery(query, > TestEntity.class) > .getResultList(); > n + 1 selects are performed which can be seen by using <property > name="openjpa.Log" value="DefaultLevel=TRACE" /> > 917 testPU TRACE [main] openjpa.Query - Executing query: SELECT z FROM > TestEntity z > 918 testPU TRACE [main] openjpa.jdbc.SQL - <t 4837279, conn 6040101> > executing prepstmnt 17507279 SELECT t0.id, t0.name FROM TestEntity t0 > 918 testPU TRACE [main] openjpa.jdbc.SQL - <t 4837279, conn 6040101> [0 > ms] spent > 919 testPU TRACE [main] openjpa.jdbc.SQLDiag - load field: 'strings' for > oid=entities.TestEntity-1 class entities.TestEntity > 919 testPU TRACE [main] openjpa.jdbc.SQL - <t 4837279, conn 6040101> > executing prepstmnt 7493991 SELECT t0.KEY0, t0.value FROM TestEntity_strings > t0 WHERE t0.TESTENTITY_ID = ? [params=(long) 1] > 919 testPU TRACE [main] openjpa.jdbc.SQL - <t 4837279, conn 6040101> [0 > ms] spent > 920 testPU TRACE [main] openjpa.jdbc.SQLDiag - load field: 'strings' for > oid=entities.TestEntity-51 class entities.TestEntity > 920 testPU TRACE [main] openjpa.jdbc.SQL - <t 4837279, conn 6040101> > executing prepstmnt 7200207 SELECT t0.KEY0, t0.value FROM TestEntity_strings > t0 WHERE t0.TESTENTITY_ID = ? [params=(long) 51] > etc..... > It doesn't matter whether or not I use <property > name="openjpa.jdbc.EagerFetchMode" value="parallel"/> or <property > name="openjpa.jdbc.EagerFetchMode" value="join"/>. > This is extremely inefficient when I wish to load a list of products that > have their name set in multiple languages by using a Map from language to > String. > As a workaround I can turn the Map into a List and search the List myself for > the right entry. -- This message is automatically generated by JIRA. - For more information on JIRA, see: http://www.atlassian.com/software/jira