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 解决了我的问题。
我正在使用 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 解决了我的问题。