openjpa-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Rick Curtis (JIRA)" <j...@apache.org>
Subject [jira] Commented: (OPENJPA-1920) N+1 select with entities that contain Maps (even with FetchType.EAGER)
Date Wed, 16 Feb 2011 17:16:24 GMT

    [ https://issues.apache.org/jira/browse/OPENJPA-1920?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12995392#comment-12995392
] 

Rick Curtis commented on OPENJPA-1920:
--------------------------------------

Try using a @PersistentMap rather than a @ElementCollection to see if that resolves the performance
issue.

> 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

        

Mime
View raw message