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.