Hi Krysztof, The update policy is "at least" nightly (when there are changes). I have a couple of machines that do builds after every change and publish them to a snapshot repository on people.apache.org.
So the fix should be available now. The last build I published was revision 806022 which contains Fay's changes. Regards, -mike Krzysztof wrote: > > Big thanks Fay! > > Will it be included in the tomorrows snapshot in maven repository? - I am > not sure about the repository update policy - is it a nightly build > version there, isn't it? It would simplify deployment in our test > environment. > Best regards, > Krzysztof > > > Fay Wang wrote: >> >> hi Krzysztof, >> I have checked the fix into the trunk (r-806011). Please extract >> the fix, enhance your entities and run the test case again. Please let me >> know if you still have problem. >> >> Regards, >> Fay >> >> >> >> >> >> ----- Original Message ---- >> From: Krzysztof <[email protected]> >> To: [email protected] >> Sent: Wednesday, August 19, 2009 1:28:44 PM >> Subject: Re: Enum as a Key in a Map >> >> >> Thank you Fay, >> Probably ApplicationIdTool could be updated as well - it actually creates >> some code for such cases, but not digestible by the compiler. >> Best regards, >> Krzysztof >> >> >> Fay Wang wrote: >>> >>> Hi Krzysztof, >>> This is a generic problem in openjpa. If an entity, say EntityA, has >>> an IdClass which contains an Enum type, and EntityB has a one-to-one >>> relationship with EntityA. This problem will surface during retrieval of >>> EntityA when doing the findBy for EntityB. Apparently there is a bug in >>> the Enhancer code. I will open a JIRA for this problem. >>> >>> Regards, >>> Fay >>> >>> >>> >>> >>> >>> >>> ----- Original Message ---- >>> From: Krzysztof <[email protected]> >>> To: [email protected] >>> Sent: Wednesday, August 19, 2009 12:07:31 PM >>> Subject: Re: Enum as a Key in a Map >>> >>> >>> Thank you, >>> I just tried to add Id class to the enum as a dirty hack but it's not >>> doable >>> of course. >>> Good luck! >>> Krzysztof >>> >>> >>> Fay Wang wrote: >>>> >>>> Hi Krzysztof, >>>> Given your description below, I am able to reproduce this problem. >>>> I >>>> will take a look at it. Thanks! >>>> >>>> Regards, >>>> Fay >>>> >>>> >>>> >>>> >>>> >>>> ----- Original Message ---- >>>> From: Krzysztof <[email protected]> >>>> To: [email protected] >>>> Sent: Wednesday, August 19, 2009 11:38:36 AM >>>> Subject: Re: Enum as a Key in a Map >>>> >>>> >>>> Thanks Kevin, >>>> >>>> Certainly, I have checked your roadmap and the relevant JIRA issue, >>>> also >>>> test cases you have in the trunk - have not seen @MapKeyEnumerated used >>>> with >>>> @OneToMany though. >>>> >>>> In the Id class of the child I kept enum as a field and used ordinal() >>>> obviously. >>>> >>>> I'm debugging this now and can see that _key enum field of the oid >>>> passed >>>> to >>>> pcCopyKeyFieldsToObjectId is null. As mentioned before, value in the DB >>>> looks ok. >>>> >>>> After dissasembling public void pcCopyKeyFieldsToObjectId(FieldSupplier >>>> fieldsupplier, Object obj) >>>> of that class I can see that >>>> >>>> TSimplId.tsType = (TSType)((ObjectId)fieldsupplier.fetchObjectField(2 >>>> + >>>> i)).getId(); >>>> >>>> for some reason enum is treated as a composite Id and cast to ObjectId >>>> fails? >>>> >>>> >>>> >>>> Cheers, >>>> Krzysztof >>>> >>>> >>>> Kevin Sutter wrote: >>>>> >>>>> Hi Krzysztof, >>>>> The MapKeyEnumerated support was introduced as part of JPA 2.0. It >>>>> looks >>>>> like this was committed via OPENJPA-1055. I've pinged Fay (owner of >>>>> the >>>>> JIRA) to take a look to see if she has any ideas. If you are >>>>> interested >>>>> in >>>>> what's been done for JPA 2.0 already, you can reference our roadmap >>>>> [1]. >>>>> I'm bringing this up in case you try some other JPA 2.0 items that >>>>> haven't >>>>> even been touched yet... :-) >>>>> >>>>> Thanks, >>>>> Kevin >>>>> >>>>> [1] http://openjpa.apache.org/jpa-20-roadmap.html >>>>> >>>>> On Wed, Aug 19, 2009 at 12:30 PM, Krzysztof <[email protected]> wrote: >>>>> >>>>>> >>>>>> Hello, >>>>>> I'm reviving this as @MapKeyEnumerated has been introduced recently >>>>>> which >>>>>> seemed addressing this issue. >>>>>> Unfortunately, if I use enum as a key where Source is amended with >>>>>> following >>>>>> annotation for the map: >>>>>> >>>>>> >>>>>> @OneToMany(mappedBy = "source",cascade={ CascadeType.ALL >>>>>> },fetch >>>>>> = >>>>>> FetchType.LAZY, orphanRemoval = true) >>>>>> @MapKeyEnumerated(EnumType.ORDINAL) >>>>>> @MapKey(name = "tsType") >>>>>> >>>>>> >>>>>> objects are committed gracefully and generated data and schema looks >>>>>> ok, >>>>>> but >>>>>> the exception reappears during retrieval: >>>>>> >>>>>> java.lang.ClassCastException: TSType cannot be cast to >>>>>> org.apache.openjpa.util.ObjectId >>>>>> >>>>>> >>>>>> gaia.cu7.omimpl.ClassificationResultsImpl.pcCopyKeyFieldsToObjectId(ClassificationResultsImpl.java) >>>>>> >>>>>> >>>>>> org.apache.openjpa.enhance.PCRegistry.copyKeyFieldsToObjectId(PCRegistry.java:172) >>>>>> >>>>>> >>>>>> org.apache.openjpa.util.ApplicationIds.fromPKValues(ApplicationIds.java:219) >>>>>> >>>>>> >>>>>> org.apache.openjpa.jdbc.meta.ClassMapping.getObjectId(ClassMapping.java:216) >>>>>> >>>>>> >>>>>> org.apache.openjpa.jdbc.meta.ClassMapping.getObjectId(ClassMapping.java:147) >>>>>> >>>>>> >>>>>> org.apache.openjpa.jdbc.kernel.JDBCStoreManager.load(JDBCStoreManager.java:934) >>>>>> >>>>>> org.apache.openjpa.jdbc.sql.AbstractResult.load(AbstractResult.java:280) >>>>>> >>>>>> >>>>>> org.apache.openjpa.jdbc.sql.SelectImpl$SelectResult.load(SelectImpl.java:2349) >>>>>> >>>>>> org.apache.openjpa.jdbc.meta.strats.RelationToManyInverseKeyFieldStrategy.loadElement(RelationToManyInverseKeyFieldStrategy.java:87) >>>>>> >>>>>> org.apache.openjpa.jdbc.meta.strats.StoreCollectionFieldStrategy.load(StoreCollectionFieldStrategy.java:554) >>>>>> >>>>>> org.apache.openjpa.jdbc.meta.FieldMapping.load(FieldMapping.java:919) >>>>>> >>>>>> >>>>>> org.apache.openjpa.jdbc.kernel.JDBCStoreManager.load(JDBCStoreManager.java:641) >>>>>> >>>>>> >>>>>> org.apache.openjpa.kernel.DelegatingStoreManager.load(DelegatingStoreManager.java:116) >>>>>> >>>>>> org.apache.openjpa.kernel.ROPStoreManager.load(ROPStoreManager.java:78) >>>>>> >>>>>> >>>>>> org.apache.openjpa.kernel.StateManagerImpl.loadFields(StateManagerImpl.java:3035) >>>>>> >>>>>> >>>>>> org.apache.openjpa.kernel.StateManagerImpl.loadField(StateManagerImpl.java:3113) >>>>>> >>>>>> >>>>>> org.apache.openjpa.kernel.StateManagerImpl.beforeAccessField(StateManagerImpl.java:1606) >>>>>> >>>>>> >>>>>> org.apache.openjpa.kernel.StateManagerImpl.accessingField(StateManagerImpl.java:1591) >>>>>> Source.pcGetclassificationResultsMap(SourceImpl.java) >>>>>> >>>>>> >>>>>> 2.0.0 trunk version. >>>>>> >>>>>> Is is possible to use enumeration as a Key in a directly mapped (no >>>>>> join >>>>>> table), bidirectional Map? Anybody with a workaround? >>>>>> >>>>>> Best regards, >>>>>> Krzysztof >>>>>> >>>>>> >>>>>> Krzysztof wrote: >>>>>> > >>>>>> > Indeed, changing the map to be keyed on a plain type does not solve >>>>>> the >>>>>> > problem until the owning 'source' field becomes plain type too. >>>>>> > So, >>>>>> > >>>>>> > <Source> >>>>>> > ... >>>>>> > @OneToMany(mappedBy="source",cascade=CascadeType.ALL) >>>>>> > @MapKey(name="tsType") >>>>>> > >>>>>> > private Map<Integer, TSImpl> tsMap; >>>>>> > ... >>>>>> > </Source> >>>>>> > <TSimpl> >>>>>> > @Id >>>>>> > @Basic(optional=false) >>>>>> > @Enumerated(EnumType.ORDINAL) >>>>>> > @Column(name="tsType",updatable=false) >>>>>> > private TSType tsType; //stays as enum, same exception thrown >>>>>> > </TSImpl> >>>>>> > gives exactly same cast exception, but if we change this part of Id >>>>>> to >>>>>> int >>>>>> > it works. Also calling persist on root persists map elements >>>>>> properly. >>>>>> > @Id >>>>>> > @Basic(optional=false) >>>>>> > // @Enumerated(EnumType.ORDINAL) >>>>>> > @Column(name="tsType",updatable=false) >>>>>> > // private TSType tsType; >>>>>> > private int tsType; >>>>>> > >>>>>> > This is not really elegant and affects a lot of code. Could you >>>>>> please >>>>>> > suggest any workaround so enum could be used as a key and is >>>>>> compatible >>>>>> > with ObjectId? Annotating enum as Embeddable gives enhancer error >>>>>> and >>>>>> > creating class wrapping an enum is also questionable in this >>>>>> particular >>>>>> > case. >>>>>> > >>>>>> > Best regards, >>>>>> > Krzysztof >>>>>> > >>>>>> > >>>>>> > >>>>>> >>>>>> -- >>>>>> View this message in context: >>>>>> http://n2.nabble.com/Enum-as-a-Key-in-a-Map-tp1639596p3474057.html >>>>>> Sent from the OpenJPA Users mailing list archive at Nabble.com. >>>>>> >>>>> >>>>> >>>> >>>> -- >>>> View this message in context: >>>> http://n2.nabble.com/Enum-as-a-Key-in-a-Map-tp1639596p3474458.html >>>> Sent from the OpenJPA Users mailing list archive at Nabble.com. >>>> >>>> >>>> >>>> >>>> >>>> >>> >>> -- >>> View this message in context: >>> http://n2.nabble.com/Enum-as-a-Key-in-a-Map-tp1639596p3474663.html >>> Sent from the OpenJPA Users mailing list archive at Nabble.com. >>> >>> >>> >>> >>> >>> >> >> -- >> View this message in context: >> http://n2.nabble.com/Enum-as-a-Key-in-a-Map-tp1639596p3475105.html >> Sent from the OpenJPA Users mailing list archive at Nabble.com. >> >> >> __________________________________________________ >> Do You Yahoo!? >> Tired of spam? Yahoo! Mail has the best spam protection around >> http://mail.yahoo.com >> >> > > -- View this message in context: http://n2.nabble.com/Enum-as-a-Key-in-a-Map-tp1639596p3480935.html Sent from the OpenJPA Users mailing list archive at Nabble.com.
