数据提交到数据库的时候报错:
oracle.jbo.RowInconsistentException: JBO-25014: 其他用户已更改具有主键 oracle.jbo.Key[2332] 的行。
at oracle.jbo.server.OracleSQLBuilderImpl.doEntitySelectForAltKey(OracleSQLBuilderImpl.java:1073)
at oracle.jbo.server.BaseSQLBuilderImpl.doEntitySelect(BaseSQLBuilderImpl.java:552)
at oracle.jbo.server.EntityImpl.doSelect(EntityImpl.java:8287)
at oracle.jbo.server.EntityImpl.lock(EntityImpl.java:5947)
at cn.eiap.framework.adf.server.EntityImpl.lock(EntityImpl.java:48)
at oracle.jbo.server.EntityImpl.beforePost(EntityImpl.java:6467)
at oracle.jbo.server.EntityImpl.postChanges(EntityImpl.java:6683)
at oracle.jbo.server.DBTransactionImpl.doPostTransactionListeners(DBTransactionImpl.java:3264)
at oracle.jbo.server.DBTransactionImpl.postChanges(DBTransactionImpl.java:3067)
at oracle.jbo.server.DBTransactionImpl.commitInternal(DBTransactionImpl.java:2071)
at oracle.jbo.server.DBTransactionImpl.commit(DBTransactionImpl.java:2352)
at cn.eiap.model.a2.services.A2ServiceImpl.approve(A2ServiceImpl.java:405)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at oracle.adf.model.binding.DCInvokeMethod.invokeMethod(DCInvokeMethod.java:655)
at oracle.adf.model.binding.DCDataControl.invokeMethod(DCDataControl.java:2161)
网上有三种解决办法,试试有的不行,在这里我只提倡一种,终极解决方案:
在eo中添加实现类,然后复写lock方法。
public void lock() {
try {
super.lock();
} catch (RowInconsistentException e) {
e.printStackTrace();
refresh(REFRESH_WITH_DB_ONLY_IF_UNCHANGED | REFRESH_CONTAINEES);
System.out.println("已被处理的异常信息:"+new java.util.Date().toLocaleString()+" 更新时出现锁异常!");
super.lock();
}
}