关键字:oracle.jbo.RowInconsistentException JBO-25014 其他用户已更改具有主键 XXX 的行
异常现象:
在ADF中新建或者更新数据的时候,进行连续的Commit操作,第一次成功,接着会出现JBO-25014异常。
异常原因:
在比较EO Cached Entity与数据库中的值的时候,出现不一致。也就是在ADF的Commit操作后,数据库中的数据被其他操作修改了,这种情况会出现在数据库端使用了Trigger的时候;另一种情况是,EO中的Attribute使用了用户自定义的domain-type,该类型的equals()方法返回false。
页面上弹出如图错误:
解决方案:
1,如果EO有Attribute使用了domain-type,检查equals()方法;
2,如果数据库端使用了trigger,修改EO的 Refresh after update 属性;
3,使用vo.executeQuery同步Model层与数据库中的数据。
异常内容:
view plain <Utils><buildFacesMessage> ADF: Adding the following JSF error message: 其他用户已更改具有主键 oracle.jbo.Key[1068 ] 的行。 oracle.jbo.RowInconsistentException: JBO-25014: 其他用户已更改具有主键 oracle.jbo.Key[1068 ] 的行。 at oracle.jbo.server.OracleSQLBuilderImpl.doEntitySelectForAltKey(OracleSQLBuilderImpl.java:1064) at oracle.jbo.server.BaseSQLBuilderImpl.doEntitySelect(BaseSQLBuilderImpl.java:548) at oracle.jbo.server.EntityImpl.doSelect(EntityImpl.java:7843) at oracle.jbo.server.EntityImpl.lock(EntityImpl.java:5631) at oracle.jbo.server.EntityImpl.beforePost(EntityImpl.java:6134) at oracle.jbo.server.EntityImpl.postChanges(EntityImpl.java:6306) at oracle.jbo.server.DBTransactionImpl.doPostTransactionListeners(DBTransactionImpl.java:3172) at oracle.jbo.server.DBTransactionImpl.postChanges(DBTransactionImpl.java:2980) at oracle.jbo.server.DBTransactionImpl.commitInternal(DBTransactionImpl.java:2018) at oracle.jbo.server.DBTransactionImpl.commit(DBTransactionImpl.java:2277) at oracle.adf.model.bc4j.DCJboDataControl.commitTransaction(DCJboDataControl.java:1577) at oracle.adf.model.binding.DCDataControl.callCommitTransaction(DCDataControl.java:1404) at oracle.jbo.uicli.binding.JUCtrlActionBinding.doIt(JUCtrlActionBinding.java:1427) at oracle.adf.model.binding.DCDataControl.invokeOperation(DCDataControl.java:2141) at oracle.jbo.uicli.binding.JUCtrlActionBinding.invoke(JUCtrlActionBinding.java:730) at oracle.adf.controller.v2.lifecycle.
PageLifecycleImpl.executeEvent(PageLifecycleImpl.java:394) at oracle.adfinternal.view.faces.model.binding.FacesCtrlActionBinding._execute(FacesCtrlActionBinding.java:252) at oracle.adfinternal.view.faces.model.binding.FacesCtrlActionBinding.execute(FacesCtrlActionBinding.java:210) at cn.xxx.doSave(FR32Bean.java:100) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)