其他用戶已更改具有主鍵[2332]的行

 數據提交到數據庫的時候報錯:

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();
            }
    }

使用方便,複製粘貼,效果顯著,立見奇效。
發佈了47 篇原創文章 · 獲贊 6 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章