yes! amazing!
@PersistentCollection(elementType=String.class)
@Externalizer("User.rolesToStrings")
@Factory("User.rolesFromStrings")
private HashSet<Role> testRoles=new HashSet<Role>();
works exactly like I want it to...
except that it also has problems with the eager fetching which I don't
quite understand. As a result I've resorted to sticking with my
nativeQuery work around. The eager fetching error is attached for anyone
who is really interested :
openjpa exception :
-------
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)
... 26 more
Caused by: java.lang.ClassCastException: java.lang.String cannot be cast to
org.apache.openjpa.enhance.PersistenceCapable
at
org.apache.openjpa.jdbc.kernel.JDBCStoreManager.setInverseRelation(JDBCStoreManager.java:408)
at
org.apache.openjpa.jdbc.kernel.JDBCStoreManager.initializeState(JDBCStoreManager.java:380)
at
org.apache.openjpa.jdbc.kernel.JDBCStoreManager.initialize(JDBCStoreManager.java:278)
at
org.apache.openjpa.kernel.DelegatingStoreManager.initialize(DelegatingStoreManager.java:111)
at
org.apache.openjpa.datacache.DataCacheStoreManager.initialize(DataCacheStoreManager.java:352)
at
org.apache.openjpa.kernel.DelegatingStoreManager.initialize(DelegatingStoreManager.java:111)
at
org.apache.openjpa.kernel.ROPStoreManager.initialize(ROPStoreManager.java:57)
at org.apache.openjpa.kernel.BrokerImpl.initialize(BrokerImpl.java:894)
at org.apache.openjpa.kernel.BrokerImpl.find(BrokerImpl.java:852)
... 59 more
On Tue, Mar 31, 2009 at 10:46:03AM -0500, Jody Grassel wrote:
> It sounds like you're trying to persist a collection of enumerations as a
> set of data and not as a reference to other entities, is that correct?
>
> If so, wouldn't a combination of @PersistentCollection and Externalization
> (section 6.6 in the manual) provide the function you are looking for?
>
>
> On Wed, Mar 25, 2009 at 11:48 AM, Tedman Leung <[email protected]> wrote:
>
> > Anyone know how to store a collection of enums as Strings instead of their
> > ordinal values? (preferably with annotations...)
> >
> > i.e.
> > @ManyToMany
> > private Set<MyEnum> myEnums=new HashSet<MyEnum>();
> >
> >
> > --
> > Ted Leung
> > [email protected]
> >
> > It's time for a new bike when the bulb in your shift light burns out.
> >
--
Ted Leung
[email protected]
Being normal is vastly over rated.