[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
Re: [eclipselink-users] Optimistic Lock Exception expected
|
A lock error should occur on your merge() call, it is unexpected if it does
not.
Ensure that you have an @Version in your object. If still not getting the
error please include the code for your class and the log on finest of your
test.
Mathias Koehnke - Sun Microsystems wrote:
>
> Hi,
>
> while replacing Toplink Essentials (2.0.1-b04-fcs (04/11/2008)) by
> EclipseLink 1.1 for a Java SE project, I came across a problem that
> prevents me from switching: I would expect getting an Optimistic Lock
> exception in case an entity gets removed from the database (by another
> thread or whatever) and one tries to commit on a still-existing runtime
> object of that entity. That was my expectation and it worked with
> Toplink Essentials so far. Using EclipseLink it doesn't throw an OL
> exception, instead the entity gets re-inserted in the database.
>
> Am I using JPA/EclipseLink the wrong way or do I miss something? From my
> understanding the following example should throw an OL exception when
> committing the last transaction:
>
> Entity entity = new Entity();
> entity.setValue("entity");
>
> //persist "entity" and create clone "entityCopy"
> EntityManager em1 = getEntityManagerFactory().createEntityManager();
> em1.getTransaction().begin();
> em1.persist(entity);
> em1.getTransaction().commit();
> Entity entityCopy = em1.find(Entity.class, entity.getId());
> em1.close();
>
> //delete "entity" from database
> EntityManager em2 = getEntityManagerFactory().createEntityManager();
> em2.getTransaction().begin();
> entity = em2.merge(entity);
> em2.remove(entity);
> em2.getTransaction().commit();
> em2.close();
>
> //merge clone "entityCopy" and commit
> EntityManager em3 = getEntityManagerFactory().createEntityManager();
> em3.getTransaction().begin();
> entityCopy = em3.merge(entityCopy);
> em3.lock(entityCopy, LockModeType.WRITE);
> em3.getTransaction().commit();
> em3.close();
>
>
> Note: I already added a SessionCustomizer modifying the session the
> following way:
>
> session.getProject().assumeExistenceForDoesExist();
>
> So, EclipseLink shouldn't check the database for the existence of the
> entity at all. Instead it should assume that the entity exists and
> simply execute an "UPDATE ..." sql statement.
>
>
> Thanks for your help in advance.
>
> Best regards,
> Mathias Koehnke
>
>
-----
---
http://wiki.eclipse.org/User:James.sutherland.oracle.com James Sutherland
http://www.eclipse.org/eclipselink/
EclipseLink , http://www.oracle.com/technology/products/ias/toplink/
TopLink
Wiki: http://wiki.eclipse.org/EclipseLink EclipseLink ,
http://wiki.oracle.com/page/TopLink TopLink
Forums: http://forums.oracle.com/forums/forum.jspa?forumID=48 TopLink ,
http://www.nabble.com/EclipseLink-f26430.html EclipseLink
Book: http://en.wikibooks.org/wiki/Java_Persistence Java Persistence
--
View this message in context: http://www.nabble.com/Optimistic-Lock-Exception-expected-tp22742662p22788601.html
Sent from the EclipseLink - Users mailing list archive at Nabble.com.