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

Oracle ADF: How to clear ViewObject cache programmatically

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

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

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

第一次访问该页面时修改成功。我尝试清除 viewobject 和 entityobject 缓存。但是运气不好。

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

请帮我删除这个异常。请给我一个解决方案。

提前致谢。

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

您必须获取该记录的锁才能消除此类异常。

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

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

我们通常通过覆盖所有实体实现中的 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;
        }
    }

嘿,您可以尝试以下操作。它对我有用

  • 将 EO 上的主键设置更改为刷新后 --> Update/Insert。
  • 更改 EO 上对象版本号属性的 "Change Indicator" 选项。
  • 添加了vo.clearCache();提交前
  • 重新部署 UiModel。

在指定主键属性的实体对象中将 "Changed Indicator" 选项设置为 true 解决了我的问题。