gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 08:36:56 26 4
gpt4 key购买 nike

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

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 实际上会起作用。

关于java - 如何使用 Glassfish 2.1 在 JPA 中实现悲观锁定?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1407473/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com