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