Oracle ADF:如何以编程方式清除ViewObject缓存

时间:2015-05-19 09:10:00

标签: oracle-adf jdeveloper

我正在使用jdeveloper 11.1.2.4开发一个adf Web应用程序。我有一个搜索表格如下。

enter image description here

实际上,当我第一次访问此页面时,我的表格空白。执行一些搜索操作后,我访问了另一个页面,然后当我回到此页面时,该页面保留了以前的搜索结果。此时我正在尝试修改anthing意味着更新或删除我正在接受以下的例外情况。

Another user has changed the row with primary key oracle.jbo.Key[1 ].

第一次访问此页面时,修改已成功完成。我尝试了清除viewobject和entityobject缓存。但没有运气。

我想如果我每次访问此页面时都获得一个新页面,这个问题就可以解决了。或者如果还有其他更好的解决方案,请告诉我。

请帮我删除此例外。请建议我一个解决方案。

提前致谢。

4 个答案:

答案 0 :(得分:1)

我们通常通过覆盖所有Entity Impl类中的lock()方法来抑制复杂ADF系统上的此异常:

  /**
     * customizing locking management:
     * Because attribute  values  can change 'outside' ADF standard life cycle,
     * when optimistic locking executes, the exception "Another User Changed the Row" is thrown.
     * In this case, we execute locking again, ignoring the exception
     */
    public void lock() {
        try {
            super.lock();
        } catch (oracle.jbo.RowInconsistentException e) {
            if (e.getErrorCode().equals("25014")) {
                super.lock();
            } else
                throw e;
        }
    }

答案 1 :(得分:0)

您目前使用哪种锁定系统?

您必须获取该记录的锁定才能摆脱此类异常。

查看此线程以获取锁定的一种方法。 https://community.oracle.com/thread/2401637

或者您也可以通过在相应的EO实例上调用EntityImpl.lock()方法随时获取锁,即使锁定模式是乐观的。

答案 2 :(得分:0)

嘿,你可以尝试以下方法。它对我有用

  • 将EO上的主键设置更改为“之后刷新” - >更新/插入。
  • 更改EO上对象版本号属性的“更改指示符”选项。
  • 添加了vo.clearCache();在提交之前
  • 重新部署UiModel。

答案 3 :(得分:0)

在指定主键属性的实体对象中将“已更改指示符”选项设置为true可解决我的问题。