JBossAS-7中的OptimisticLockException

JBossAS-7中的OptimisticLockException,exception,ejb,jboss7.x,Exception,Ejb,Jboss7.x,当我尝试更新托管实体EJB时,我得到了一个OptimisticLockException EJB是通过以下方式获取的: port = entityManager.find(PortEntity.class, portID); 然后EJB和entityManager被传递给SAXContentHandler,以便在endDocUpent()方法中对其进行更新。ContentHandler已经从Google的数据库返回的数据中提取了时区信息 代码片段是: entityManager.refresh

当我尝试更新托管实体EJB时,我得到了一个
OptimisticLockException

EJB是通过以下方式获取的:

port = entityManager.find(PortEntity.class, portID);
然后EJB和entityManager被传递给SAX
ContentHandler
,以便在
endDocUpent()
方法中对其进行更新。
ContentHandler
已经从Google的数据库返回的数据中提取了时区信息

代码片段是:

entityManager.refresh(port);
if (entityManager.contains(port))
    log.info("Contained: " + port);
else
    log.info("NOT Contained: " + port);

port.setTimezone(toTimezone);
entityManager.flush();   // <-- Line 70 
因此,如果
entityManager
包含EJB,为什么在修改它之后会出现异常

一如既往,非常感谢你的帮助

史蒂夫

附言


我已经看过了,MySQL数据库正在使用InnoDB,但我不知道如何执行
SELECT@@tx\u隔离我的代码中的命令。

经过两天的研究,我终于找到了问题所在

实体类继承自其超类a
javax.persistence.Version
字段。我还将数据手动注入表中,因为version字段被定义为允许null,所以我没有费心插入一个值,但需要一个值

13:48:05,568 INFO  [GeotimezoneHandler] Status: OK
13:48:05,569 INFO  [GeotimezoneHandler] Raw offset: 3600.0000000
13:48:05,570 INFO  [GeotimezoneHandler] DST offset: 0.0000000
13:48:05,570 INFO  [GeotimezoneHandler] Timezone ID: Europe/Madrid
13:48:05,571 INFO  [GeotimezoneHandler] Timezone Name: Central European Standard Time
13:48:05,577 INFO  [GeotimezoneHandler] Contained: SeaPort[id=ESBCN, name=Barcelona]
13:48:05,591 ERROR [GeotimezoneHandler] Updating curise: javax.persistence.OptimisticLockException: org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect): [com.nutrastat.voyager.entity.PortEntity$Sea#ESBCN]
    at org.hibernate.ejb.AbstractEntityManagerImpl.wrapStaleStateException(AbstractEntityManagerImpl.java:1390) [hibernate-entitymanager-4.0.1.Final.jar:4.0.1.Final]
    at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1308) [hibernate-entitymanager-4.0.1.Final.jar:4.0.1.Final]
    at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1289) [hibernate-entitymanager-4.0.1.Final.jar:4.0.1.Final]
    at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1295) [hibernate-entitymanager-4.0.1.Final.jar:4.0.1.Final]
    at org.hibernate.ejb.AbstractEntityManagerImpl.flush(AbstractEntityManagerImpl.java:976) [hibernate-entitymanager-4.0.1.Final.jar:4.0.1.Final]
    at org.jboss.as.jpa.container.AbstractEntityManager.flush(AbstractEntityManager.java:439) [jboss-as-jpa-7.1.1.Final.jar:7.1.1.Final]
    at com.nutrastat.voyager.util.GeotimezoneHandler.endDocument(GeotimezoneHandler.java:70) [voyager-lib.jar:]