You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@openjpa.apache.org by "Donald Woods (JIRA)" <ji...@apache.org> on 2010/04/07 18:28:33 UTC

[jira] Resolved: (OPENJPA-1602) Query with lock mode set to PESSIMISTIC_WRITE does not have for update clause attached to the sql when runs twice

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

Donald Woods resolved OPENJPA-1602.
-----------------------------------

    Resolution: Fixed

> Query with lock mode set to PESSIMISTIC_WRITE does not have for update clause attached to the sql when runs twice
> -----------------------------------------------------------------------------------------------------------------
>
>                 Key: OPENJPA-1602
>                 URL: https://issues.apache.org/jira/browse/OPENJPA-1602
>             Project: OpenJPA
>          Issue Type: Bug
>          Components: jdbc
>    Affects Versions: 2.0.0
>            Reporter: Fay Wang
>            Assignee: Pinaki Poddar
>            Priority: Critical
>             Fix For: 2.0.0
>
>
> The following test case executes query two times. 
> The sql generated for the first time:
> sql = SELECT t0.KEYNAME, t0.KEYVAL FROM KEYGEN t0 WHERE (t0.KEYNAME = ?)  optimize for 1 row FOR READ ONLY WITH RR USE AND KEEP UPDATE LOCKS
> The sql generated for the second time:
> sql = SELECT t0.KEYNAME, t0.KEYVAL FROM KEYGEN t0 WHERE (t0.KEYNAME = ?)
>    public void testKeyGen() {
>         EntityManager em = emf.createEntityManager();
>         KeyGenEntity key = null;
>         em.getTransaction().begin();
>         for (int i = 0;i < 2; i++) {
>             Query q = em.createNamedQuery("getStationKeyForUpdate");
>             q.setLockMode(LockModeType.PESSIMISTIC_WRITE);
>             q.setParameter("keyname", keyName);
>             try {
>                 key = (KeyGenEntity) q.getSingleResult();
>                 em.refresh(key);
>             }
>             catch (NoResultException e) {
>                 // No keys found for this name - create a new one
>                 int keyVal = 0;
>                 key = new KeyGenEntity(keyName, keyVal);
>                 em.persist(key);
>                 em.lock(key, LockModeType.PESSIMISTIC_WRITE);
>             }
>             int keyVal = key.getKeyval();
>             key.setKeyval(keyVal +  1);
>         }
>         em.getTransaction().commit();
>     }

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