openjpa-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Fay Wang (JIRA)" <j...@apache.org>
Subject [jira] Commented: (OPENJPA-1602) Query with lock mode set to PESSIMISTIC_WRITE does not have for update clause attached to the sql when runs twice
Date Mon, 29 Mar 2010 19:42:27 GMT

    [ https://issues.apache.org/jira/browse/OPENJPA-1602?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12851056#action_12851056
] 

Fay Wang commented on OPENJPA-1602:
-----------------------------------

The following is the KeyGenEntity.java:

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.NamedQuery;
import javax.persistence.Table;

/**
 * Handles key gen generation for a number of cases.
 *
 */
@Entity
@Table(name="KEYGEN")
@NamedQuery(name="getStationKeyForUpdate",
query="select kg from KeyGenEntity as kg where kg.keyname = :keyname")
public class KeyGenEntity {

@Id
@Column(name="KEYNAME")
private String keyname;
@Column(name="KEYVAL")
private int keyval;

public String getKeyname() {
return keyname;
}

public void setKeyname(String keyname) {
this.keyname = keyname;
}

public int getKeyval() {
return keyval;
}

public void setKeyval(int keyval) {
this.keyval = keyval;
}

public KeyGenEntity() {
}

public KeyGenEntity(String keyname, int keyval) {
super();
this.keyname = keyname;
this.keyval = keyval;
}
} 

> 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.


Mime
View raw message