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 <ted...@sfu.ca> 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 > > ted...@sfu.ca > > > > It's time for a new bike when the bulb in your shift light burns out. > > -- Ted Leung ted...@sfu.ca Being normal is vastly over rated.