openjpa-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From John Leach <john.le...@syger.com>
Subject Re: InvalidStateException: Attempt to set column "client.version" to two different values
Date Tue, 13 May 2008 09:51:04 GMT

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:Craig.Russell@sun.com
>>>> 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.


Mime
View raw message