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.1.0
            Reporter: Fay Wang


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.

Reply via email to