OpenJPA脏读提示

时间:2011-06-01 10:36:38

标签: java db2 openjpa

我们有以下DAO堆栈:

  • DB2 9.7 Express-C
  • OpenJPA 2.0.1
  • Spring 3.0.5
  • Bitronix 2.1.1

如何指定OpenJPA在查询末尾添加WITH UR sql子句?

我几天都浏览过网站和手册,应该是这样的:

Query q = em.createQuery("select m from Magazine m where ... ");
q.setHint("openjpa.FetchPlan.ReadLockMode","WRITE");
List r = q.getResultList();

但是唉,我一直无法找到一个工作的OpenJPA属性,它将作为setHint()参数传递并产生WITH UR作为结果,所以我使用SpringJDBC查询,遗憾的是我无法使用不再。

有什么想法吗?非常感谢你

2 个答案:

答案 0 :(得分:4)

OpenJPA不支持在JPQL中使用WITH UR子句。您始终可以使用native query来实现此功能。

答案 1 :(得分:0)

我现在遇到了类似的问题 - 看起来似乎是设置:

query.setHint("openjpa.FetchPlan.Isolation", "READ_UNCOMMITTED");

会做到这一点。不幸的是,源代码显示永远不会读取来自withURClause的常量org.apache.openjpa.jdbc.sql.DB2Dictionary

此外,如果查询不是FOR UPDATE,OpenJPA 从不会考虑提取计划提示。我有一个select语句在独占锁上被阻止,它可以真正用于未提交的数据 - 与OpenJPA无关。