Dear list, I must stop talking to myself. Yes it is a bug https://issues.apache.org/jira/browse/OPENJPA-327 OPENJPA-327
The test case uses @PostUpdate, but the same thing seems to happen for @PreUpdate. Sigh. Nonetheless, I still need help with the second showstopper... John John Leach wrote: > > Dear list, > The first showstopper InvalidStateException: Attempt to set column > "client.version" to two different values... where the version field is > being updated (this is an optimistic locking field, and has a @Version > annotation), is being caused by a @PreUpdate annotation in the abstract > model class. > > If I remove the annotation, all works fine, put it back and the exception > returns. > > I am inclined to think that this is a bug - in the above example a client > (many to one) is removed from a user (one to many), then I call flush. > Firstly I don't understand why the client is updated, but this may have to > do with the fact that I haven't been able to set a 'delete orphan' cascade > yet. Still, no values in the client were changed (by my code, at least). > The update calls the @PreUpdate method, but then seems to increment the > version number *again*. > > The second showstopper is finding a way to change the metadata before an > EntityManager is created. The intention is to provide a 'third' > alternative to annotations and/or persistence.xml, where the entity > classes contain only JPA annotations, with any remaining changes being > made programmatically. The one-to-many example defines CascadeType.ALL, > but actually requires a 'delete-orphans' extension for the tests to > succeed. Again, my many attempts at hooking into the properties > openjpa.BrokerFactory or openjpa.BrokerImpl or openjpa.MetaDataFactory all > met with failure of one sort or the other (mostly ClassCast exceptions > within the OpenJPA code). > > Any help would be greatly appreciated. > > The code is available in an open source project, called Spikes and can be > downloaded via Subversion with the command: > > svn checkout https://lab.jugtorino.it/svn/sandbox/spikes/trunk spikes > > Best regards > John > > > John Leach wrote: >> >> Hello list, >> Spikes is now Java 5 compatible. I also fixed a nasty mishtak in the >> manager. Say after me persist/merge != save/update. Added ant task >> openjpac bytecode twiddling before running the tests, and guess what? >> Same problem, er, persists. Sigh. >> >> John >> >> >> John Leach wrote: >>> >>> Hello Craig, >>> Oops, I compiled parancoe-yaml with Eclipse, and didn't check the >>> version. Should compile with Java 5 though. My mistake. Spike compiles >>> with the ant task set to 1.5 source and target. I'll recompile the jar >>> file and update the svn repository this weekend. >>> >>> John >>> >>> >>> Craig L Russell wrote: >>>> >>>> Hi John, >>>> >>>> Does the project require Java 6? I checked out the sources and cd >>>> trunk; ant. It appears that one of the dependencies is compiled with >>>> Java 6. >>>> test-compile: >>>> [javac] Compiling 29 source files to /Users/clr/spikes/trunk/bin >>>> [javac] /Users/clr/spikes/trunk/java/src/org/syger/fixtures/ >>>> YamlHelper.java:28: cannot access org.parancoe.yaml.Yaml >>>> [javac] bad class file: /Users/clr/spikes/trunk/extlib/parancoe- >>>> yaml.jar(org/parancoe/yaml/Yaml.class) >>>> [javac] class file has wrong version 50.0, should be 49.0 >>>> [javac] Please remove or make sure it appears in the correct >>>> subdirectory of the classpath. >>>> [javac] import org.parancoe.yaml.Yaml; >>>> [javac] ^ >>>> [javac] 1 error >>>> >>>> more below... >>>> >>>> On May 10, 2008, at 7:38 AM, John Leach wrote: >>>> >>>>> >>>>> Dear list, >>>>> As part of a (very) small open source project to provide domain entity >>>>> mapping and association examples, together with a programmatic >>>>> interface to >>>>> reach outside the JPA 1.0 specifications, I am struggling with two >>>>> problems >>>>> using OpenJPA. >>>>> >>>>> I had better warn you all that I am a freelance consultant working >>>>> in Italy >>>>> and I use and will be using this work to sell both the advantages and >>>>> disadvantages (but with solutions) of using JPA 1.0. to my clients. >>>>> >>>>> The first showstopper is an InvalidStateException: Attempt to set >>>>> column >>>>> "client.version" to two different values... where the version field >>>>> is being >>>>> updated (this is an optimistic locking field, and has a @Version >>>>> annotation), the SQL query being performed seems to be: >>>>> UPDATE client SET lastUpdated = ?, version = ? WHERE id = ? AND >>>>> version = ? >>>>> [params=(Timestamp) 2008-05-10 15:58:16.593, (int) 3, (long) 3, >>>>> (int) 2] >>>> >>>> This SQL seems correct. It's updating the lastUpdated and version >>>> columns and verifying that the version is correct. Where does this >>>> error occur? >>>> >>>> Craig >>>>> >>>>> The same annotated entities work just fine with Hibernate and >>>>> EclipseLink - >>>>> for what that's worth. >>>>> I have even tried adding openjpac in the ant task, but the results >>>>> remain >>>>> the same. >>>>> I am convinced that this is a Spring/OpenJPA configuration problem, >>>>> but >>>>> being a relative novice with Spring (and OpenJPA) I have been >>>>> beating my >>>>> head against the proverbial brick wall for two days, and not even a >>>>> dent in >>>>> the wall to show for my efforts. >>>>> >>>>> The second showstopper is finding a way to change the metadata >>>>> before an >>>>> EntityManager is created. The intention is to provide a 'third' >>>>> alternative >>>>> to annotations and/or persistence.xml, where the entity classes >>>>> contain only >>>>> JPA annotations, with any remaining changes being made >>>>> programmatically. The >>>>> one-to-many example defines CascadeType.ALL, but actually requires a >>>>> 'delete-orphans' extension for the tests to succeed. Again, my many >>>>> attempts >>>>> at hooking into the properties openjpa.BrokerFactory or >>>>> openjpa.BrokerImpl >>>>> or openjpa.MetaDataFactory all met with failure of one sort or the >>>>> other >>>>> (mostly ClassCast exceptions within the OpenJPA code). >>>>> >>>>> Any help would be greatly appreciated. I am working 'in >>>>> collaboration with' >>>>> two Java User Groups (Torino and Trento), but it's really me who >>>>> wrote most >>>>> of the code. >>>>> >>>>> The open source project, called Spikes (guess why) can be downloaded >>>>> via >>>>> Subversion with the command: >>>>> svn checkout https://lab.jugtorino.it/svn/sandbox/spikes/trunk spikes >>>>> There is a Trac site at >>>>> http://lab.jugtorino.it/trac/sandbox/wiki/Spikes >>>>> , >>>>> which I have converted to English in most places, and also an >>>>> article (which >>>>> started the project rolling) >>>>> http://www.syger.it/Tutorials/JPA10Gotchas.html >>>>> >>>>> Best regards >>>>> John Leach, Verona, Italy >>>>> -- >>>>> View this message in context: >>>>> http://www.nabble.com/InvalidStateException%3A-Attempt-to-set-column-%22client.version%22-to-two-different-values-tp17163045p17163045.html >>>>> Sent from the OpenJPA Users mailing list archive at Nabble.com. >>>>> >>>> >>>> Craig Russell >>>> Architect, Sun Java Enterprise System http://java.sun.com/products/jdo >>>> 408 276-5638 mailto:[EMAIL PROTECTED] >>>> P.S. A good JDO? O, Gasp! >>>> >>>> >>>> >>>> >>> >>> >> >> > > -- View this message in context: http://www.nabble.com/InvalidStateException%3A-Attempt-to-set-column-%22client.version%22-to-two-different-values-tp17163045p17204927.html Sent from the OpenJPA Users mailing list archive at Nabble.com.
