[ 
https://issues.apache.org/jira/browse/OPENJPA-197?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Abe White closed OPENJPA-197.
-----------------------------

    Resolution: Invalid

> @Version property doesn't ensure integrity when performing the merge operation
> ------------------------------------------------------------------------------
>
>                 Key: OPENJPA-197
>                 URL: https://issues.apache.org/jira/browse/OPENJPA-197
>             Project: OpenJPA
>          Issue Type: Bug
>          Components: jpa
>    Affects Versions: 0.9.7
>            Reporter: Jacek Laskowski
>
> See the simple test case:
>         {
>             Query query = em.createQuery("SELECT o FROM Osoba o WHERE o.imie 
> = 'Jacek' AND o.nazwisko = 'Laskowski'");
>             final Osoba osoba = (Osoba) query.getSingleResult();
>             final Long numerOsoby = osoba.getNumer(); // numer is the pk
>             long wersja = osoba.getWersja(); // wersja is a versioned property
>             {
>                 EntityTransaction tx = em.getTransaction();
>                 tx.begin();
>                 Osoba osobaWersja0 = em.find(Osoba.class, numerOsoby);
>                 assert osobaWersja0.getWersja() == wersja;
>                 osobaWersja0.setImie("change");
>                 em.flush();
>                 wersja++;
>                 assert osobaWersja0.getWersja() == wersja;
>                 tx.commit();
>                 assert osobaWersja0.getWersja() == wersja;
>                 em.refresh(osobaWersja0);
>                 assert osobaWersja0.getWersja() == wersja;
>             }
>             {
>                 em.clear(); // osoba is now detached
>                 final String noweImie = "Yet another name change";
>                 osoba.setImie(noweImie);
>                 EntityTransaction tx = em.getTransaction();
>                 tx.begin();
>                 Osoba osobaWersja1 = em.find(Osoba.class, numerOsoby);
>                 osobaWersja1.setImie("and another");
>                 tx.commit(); // change is on its way to database
>                 wersja++;
>                 assert osobaWersja1.getWersja() == wersja;
>                 assert osobaWersja1.getWersja() != osoba.getWersja();
>                 if 
> (em.getClass().getCanonicalName().equals("org.apache.openjpa.persistence.EntityManagerImpl"))
>  {
>                     Osoba osobaPoMerge = em.merge(osoba);
>                     assert osobaPoMerge.getImie().equals(osoba.getImie());
>                     assert osobaPoMerge.getImie().equals(noweImie);
>                     em.getTransaction().begin();
>                     try {
>                         em.flush();
>                         assert false;
>                     } catch (/* OptimisticLock */Exception oczekiwano) {
>                         em.getTransaction().rollback();
>                     }
>                 }
>             }
>         }
> It works fine with Apache OpenJPA 0.9.7-SNAPSHOT with the sources on the past 
> Friday. Hibernate EntityManager 3.3.1 and TopLink Essentials 2.0 BUILD 40 
> throw exception as the detached entity is merged  to em. According to the 
> spec 9.1.17 Version Annotation p. 178 (and the javadoc - 
> http://java.sun.com/javaee/5/docs/api/javax/persistence/Version.html - too):
> The Version annotation specifies the version field or property of an entity 
> class that serves as its optimistic lock value. The version is used to ensure 
> integrity when performing the merge operation and for optimistic concurrency 
> control.
> So, I think that it's a bug in OpenJPA.
> BTW, I'm still unable to send emails to open-jpa-dev. Who should I contact to 
> in order to fix it?

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to