Just to document more thoughts and findings. 1) I was using the wrong annotation, I should have been using @PersistentCollection
2) this seems to be a more wide spread problem with defining attributes to collections, i.e. - collection of enums needs to have @Enumerated configurations - collection of Dates needs to have @Temporal configurations - even collection of Strings seems to be missing a @Column(nullable=false, length=32) style annotation. I think the problem is much bigger and wide spread than I originaly though, I don't think I'll be able to sort out a patch. On Sun, Mar 29, 2009 at 07:55:06AM -0700, Tedman Leung wrote: > yes I know I can do manual hacks to get them stored the way I want to, but > I was asking if there was a jpa / openjpa annotation to allow that. > > As an example, I can just use @Enumerated on a single enum, so it seems > logical that some one would have thought about storing a collection of > enums. > > As for why I want them as strings instead of ordinals - the usual reasons, > i.e. it's safer for changes as the ordering won't accidentally corrupt my > data (and without telling me), and it's easier to look into the database > via sql or something and just know what's going on / get simple reports > etc. > > I'm guessing right now that it's not possible at all and that no one has > done anything towards this. I might have to rummage through the source > and try to see if I can figure out how it works and hack a patch to > submit. It seemed like a very straight forward use case though so I'm > surprised no one has asked or done anything about this before. > > > > On Sat, Mar 28, 2009 at 10:13:16PM -0700, Paul Copeland wrote: > > What is your objective? Do you want some non-JPA application to see > > them in the database as Strings? > > > > At some point you have add these Enums to the collection one at a time. > > You can use an addEnum() method or an Entity listener to convert them to > > Strings at that point one at a time. And a subclass of the Collection > > type to getEnum() from the Collection when you fetch them back. > > > > new MyStringEnumHashSet<MyStringEnumType>() > > > > On 3/28/2009 9:27 PM, Tedman Leung wrote: > >> No, I'm talking about when the enum is in a collection. > >> > >> i.e. > >> > >> Private HashSet<Gender> genders=new HashSet<Gender>(); > >> > >> So no, either the @Enumerated helps, nor does calling name() or > >> toString as neither are possible. > >> > >> I'm storing a Collection of enums , not a single Enum. > >> > >> There seems to be no examples of this nor any documentation about the > >> ability to do this that I can find. The default seems to use the > >> ordinal value both for table generation and storage value. > >> > >> > >> > >> > >> On Sat, Mar 28, 2009 at 01:56:13PM -0700, Paul Copeland wrote: > >> > >>> Hi - This is from the OpenJPA relations example - > >>> > >>> @Basic @Enumerated(EnumType.STRING) > >>> private Gender gender; > >>> > >>> public static enum Gender { MALE, FEMALE } > >>> > >>> public void setGender(Gender gender) { > >>> this.gender = gender; > >>> } > >>> > >>> See section 12.8.1.2 in the OpenJPA Overview > >>> > >>> - Paul > >>> > >>> On 3/28/2009 1:33 PM, catalina wei wrote: > >>> > >>>> Ted, > >>>> If you are using Java 5, then you could use name() or toString() API on > >>>> the > >>>> Enum to get the name of the enum constant in String value. > >>>> > >>>> Catalina > >>>> > >>>> On Wed, Mar 25, 2009 at 9: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 > > The most important words I've learned to say - "I don't know". -- Ted Leung ted...@sfu.ca It is easier to speak wisely than to act wisely.