首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Openjpa锁不起作用

Openjpa锁不起作用
EN

Stack Overflow用户
提问于 2013-10-09 23:30:04
回答 1查看 500关注 0票数 1

在一个使用OpenJPA 2.1和oracle数据库的项目中,我使用了混合锁定模式,该模式默认使用乐观锁定,但也可以使用悲观锁定。但它并不像我预期的那样对我起作用。所以我写了一个openjpa锁的小测试。

Persistance.xml配置:

代码语言:javascript
复制
<properties>

    <property name="openjpa.Optimistic" value="false" />
    <property name="openjpa.LockManager" value="mixed" /> 
<!--    <property name="openjpa.LockManager"value="mixed(VersionCheckOnReadLock=true,VersionUpdateOnWriteLock=true)" /> -->
    <property name="openjpa.RuntimeUnenhancedClasses" value="unsupported" />
    <property name="openjpa.slice.ConnectionDriverName" value="oracle.jdbc.OracleDriver" />
    <property name="openjpa.slice.ConnectionURL" value="jdbc:oracle:thin:******" />
    <property name="openjpa.slice.ConnectionUserName" value="user" />
    <property name="openjpa.slice.ConnectionPassword" value="userpassword" />
    <property name="openjpa.jdbc.SynchronizeMappings" value="validate" />
    <property name="openjpa.jdbc.SchemaFactory" value="native(ForeignKeys=true)" />
    <property name="openjpa.Log"
        value="DefaultLevel=INFO, Runtime=INFO, Tool=INFO, SQL=TRACE" />
</properties>

我的简单测试代码:

代码语言:javascript
复制
Configuration config = entityManager.find(Configuration.class, 10025984L);
entityManager.lock(config, LockModeType.PESSIMISTIC_WRITE);

在sql trace中可以看到,调用OpenJPA后锁定方法不会对数据库执行任何额外的查询。单个sql查询:

代码语言:javascript
复制
TRACE  [Thread-7] openjpa.jdbc.SQL - <t 874198043, conn 1773300146> executing prepstmnt 1809148885 SELECT t0.VERSION FROM Configuration t0 WHERE t0.ID = ? [params=?] 

我做错了什么,如何为一个实体实例获取锁?

EN

回答 1

Stack Overflow用户

发布于 2013-10-10 15:32:37

我找到了解决之道。原因在于JPA设置。我只是删除了属性:

代码语言:javascript
复制
<property name="openjpa.Optimistic" value="false" />

一切都变得正常了。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19276300

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档