Sorry if this is a double post but I noticed I didn't really pose a question in
my previous mail from 2011-1-7.
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 multiple entities (SELECT z FROM TestEntity z), OpenJPA 2.0
performs one query for each TestEntity to fetch the map. This also happens when
the Map value is an entity and I use @OneToMany instead of @ElementCollection.
In principle this can be done more efficiently with one query that selects all
the map entries for all returned TestEntities. For Collection-valued fields
OpenJPA already does this by default (openjpa.jdbc.EagerFetchMode"
value="parallel").
Could I be doing something wrong? Is there an easy way to tell OpenJPA to not
perform a query per entity but only one?
Or is there already any work planned on improving this (I filed it under
https://issues.apache.org/jira/browse/OPENJPA-1920)?
It is a problem for us because we wish to fetch (and detach) a list of about
1900 products which takes almost 15 seconds with OpenJPA. It takes less than a
second with my own native query.
Having to write only one native query wouldn't be much of a problem but the map
we use is inside a reusable StringI18N entity which is referenced from several
different entities (and can be deep in the object graph), so native queries are
a maintenance headache.
Any help getting performance up is greatly appreciated.
Regards,
Henno Vermeulen
Huize Molenaar