You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@openjpa.apache.org by Tedman Leung <te...@sfu.ca> on 2009/03/30 05:37:55 UTC
bug in @PersistentCollection(fetch=FetchType.EAGER)
I think I've found a bug in @PersistentCollection(fetch=FetchType.EAGER)
when used with Strings. It just doesn't seem to retrieve.
This only happens with FetchType.EAGER and it only happens if the entity
is being loaded from the database / not cached via openjpa.DataCache. (If
I create the entity then persist it, then do a find on it, it'll work, I
think it's because it's just hitting my cache, if I shutdown the jvm,
then start it up again, then load the entity I see the error.)
The declaration of the column is as follows :
@PersistentCollection(fetch=FetchType.EAGER)
@ContainerTable(name="UserRole", joinColumns=@XJoinColumn(name="userId", referencedColumnName="id"), joinForeignKey=@ForeignKey)
@ElementJoinColumn(name="Role")
private Set<String> roles=new HashSet<String>();
I'm using compile time enhancement.
I'm using java :
java version "1.6.0_12"
Java(TM) SE Runtime Environment (build 1.6.0_12-b04)
Java HotSpot(TM) Server VM (build 11.2-b01, mixed mode)
The openjpa is 1.2.1 as retrieved via the apache maven repositories.
The exception is as follows :
-----------------------------
Caused by: <openjpa-1.2.1-r752877:753278 nonfatal general error>
org.apache.openjpa.persistence.PersistenceException: java.lang.String
cannot be cast to org.apache.openjpa.enhance.PersistenceCapable
at org.apache.openjpa.kernel.BrokerImpl.find(BrokerImpl.java:875)
at org.apache.openjpa.kernel.BrokerImpl.find(BrokerImpl.java:774)
at org.apache.openjpa.jdbc.kernel.JDBCStoreManager.load(JDBCStoreManager.java:982)
at org.apache.openjpa.jdbc.sql.AbstractResult.load(AbstractResult.java:278)
at org.apache.openjpa.jdbc.sql.SelectImpl$SelectResult.load(SelectImpl.java:2400)
at org.apache.openjpa.jdbc.sql.AbstractResult.load(AbstractResult.java:272)
at org.apache.openjpa.jdbc.kernel.InstanceResultObjectProvider.getResultObject(InstanceResultObjectProvider.java:59)
at org.apache.openjpa.datacache.QueryCacheStoreQuery$CachingResultObjectProvider.getResultObject(QueryCacheStoreQuery.java:597)
at org.apache.openjpa.lib.rop.EagerResultList.<init>(EagerResultList.java:36)
at org.apache.openjpa.kernel.QueryImpl.toResult(QueryImpl.java:1228)
at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:990)
at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:805)
at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:775)
at org.apache.openjpa.kernel.DelegatingQuery.execute(DelegatingQuery.java:533)
at org.apache.openjpa.persistence.QueryImpl.execute(QueryImpl.java:252)
at org.apache.openjpa.persistence.QueryImpl.getResultList(QueryImpl.java:294)
--
Ted Leung
tedman@sfu.ca
It is easier to speak wisely than to act wisely.