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.