You're welcome!

Lukas

Am 26.03.2010 um 17:51 schrieb Andras Hatvani:

> Lukas,
> 
> thanks for the prompt and detailed answer!
> 
> Cheers,
> Andras
> 
> On 2010 Mar 26, at 17:15, Lukas Lang wrote:
> 
>> Hey Andras,
>> 
>> great to see another group of students participating!
>> 
>> Regarding your question:
>> After committing the first transaction, the object's state is transferred to 
>> the database (eventually flushed), the transaction cache is invalidated and 
>> the object tracker (which identifies changes within objects) stops 
>> "following" the Person instance. In terms of JPA: It becomes detached.
>> 
>> When starting the second transaction, Castor (the running transaction in 
>> specific) has no clue that your Person instance wants to contribute to that 
>> transaction (Imagine Castor keeping references to all objects someone had 
>> loaded from the database earlier would not be such a good idea, especially 
>> from the garbage collection's point of view and concerning database locks 
>> etc.).
>> 
>> However, you have two options:
>> 
>> 1) Load the entity, then modify it and then commit the transaction.
>> 2) Explicitly calling Database.update using Long Transactions as described 
>> in [1].
>> 
>> I hope that all your questions are now answered. Feel free to follow up, if 
>> not.
>> 
>> Regards,
>> Lukas
>> 
>> PS: One more thing: ad "persisted value remains the same". Always perform a 
>> flush first, because it simply may have not been flushed!
>> 
>> [1] Long Transactions, http://castor.org/long-transact.html
>> 
>> Am 26.03.2010 um 16:39 schrieb Andras Hatvani:
>> 
>>> Hi,
>>> 
>>> I'm new to Castor and I'm part of this semester's development team of the 
>>> course Advanced Software Engineering on the Vienna University of Technology.
>>> During the development with Castor the following question arose for me: Why 
>>> must the load and the updating of an object be in the same transaction?
>>> 
>>> Example:
>>> 1) WORKS
>>> db.begin();
>>> loadedPerson = db.load(Person.class, id);
>>> loadedPerson.setFirstName(FIRST_NAME_2);
>>> db.commit();
>>> 
>>> 2) DOESN'T WORK
>>> db.begin();
>>> loadedPerson = db.load(Person.class, id);
>>> db.commit();
>>> 
>>> db.begin();
>>> loadedPerson.setFirstName(FIRST_NAME_2);
>>> db.commit();
>>> 
>>> In the second case the persisted values remained the same.
>>> 
>>> Thanks,
>>> Andras Hatvani
>>> 
>>> 
>>> ---------------------------------------------------------------------
>>> To unsubscribe from this list, please visit:
>>> 
>>>  http://xircles.codehaus.org/manage_email
>>> 
>>> 
>> 
>> 
>> ---------------------------------------------------------------------
>> To unsubscribe from this list, please visit:
>> 
>>   http://xircles.codehaus.org/manage_email
>> 
>> 
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe from this list, please visit:
> 
>    http://xircles.codehaus.org/manage_email
> 
> 


---------------------------------------------------------------------
To unsubscribe from this list, please visit:

    http://xircles.codehaus.org/manage_email


Reply via email to