繁体   English   中英

如何使用Glassfish 2.1在JPA中实现悲观锁定?

[英]How to implement pessimistic locking in JPA with Glassfish 2.1?

尝试设置锁(悲观)时,请使用以下代码:

em.lock(controlnumbers, LockModeType.WRITE);
em.refresh(controlnumbers);

我收到以下异常:

[#|2009-09-10T15:42:48.324-0400|INFO|sun-appserver2.1|javax.enterprise.system.container.ejb|_ThreadID=31;_ThreadName=httpSSLWorkerThread-8080-19;|
javax.ejb.TransactionRolledbackLocalException: Exception thrown from bean; nested exception is: javax.persistence.PersistenceException: ejb30-wrong-lock_called_without_version_locking-index (There is no English translation for this message.)
javax.persistence.PersistenceException: ejb30-wrong-lock_called_without_version_locking-index (There is no English translation for this message.)
        at oracle.toplink.essentials.internal.ejb.cmp3.base.EntityManagerImpl.lock(EntityManagerImpl.java:619)
        at com.sun.enterprise.util.EntityManagerWrapper.lock(EntityManagerWrapper.java:582)
        at com.eximtechnologies.transactionserver.persistence.session.ControlNumbersFacade.lock(ControlNumbersFacade.java:43)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

如何使用Glassfish 2.1实现悲观锁定?

有一种Toplink Essentials(默认为GF 2.1)来执行此操作:

public MyObject lock (MyObject controlnumbers) {
    String qStr = "select object(o) from MyObject as o where o.pk = :pk";
    Query q = em.createQuery(qStr);
    q.setParameter("pk", "a");
    q.setHint("toplink.pessimistic-lock", "Lock");
    controlnumbers = (MyObject)q.getSingleResult();
    return controlnumbers;
}

我相信使用Hibernate调用em.lock会真正起作用。

您可以显示课程的映射吗? 看起来您缺少版本属性...看一下

http://en.wikibooks.org/wiki/Java_Persistence/Locking#Timestamp_Locking

此致Jan

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM