【異常】Caused by: java.lang.ClassNotFoundException: org.springframework.dao.DataIntegrityViolationException


 

Caused by: java.lang.ClassNotFoundException: org.springframework.dao.DataIntegrityViolationException
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at org.springframework.util.ClassUtils.forName(ClassUtils.java:257)
這個異常是數據庫插入時違反數據庫約束引起 ,例如主鍵重復、向非空字段插入空值,或者插入字段違反表結構等
 
由於現場沒有及時反饋日志, 只能通過數據庫信息排查
--查看SEQ 信息 
SELECT US.*
  FROM USER_SEQUENCES US
 WHERE US.SEQUENCE_NAME IN
       ('SEQ_PAYMENT', 'SEQ_PAYMENTDETAIL', 'SEQ_PHYRESOURCE',
        'SEQ_DOCARDLOG', 'SEQ_VOUCARDSALE', 'SEQ_VOUCARDSALELIST');
 
--查看表信息
SELECT UT.TABLE_NAME, UT.NUM_ROWS
  FROM USER_TABLES UT
 WHERE UT.TABLE_NAME IN
       ('PAYMENT', 'PAYMENTDETAIL', 'PHYRESOURCE', 'DOCARDLOG',
        'VOUCARDSALE', 'VOUCARDSALELIST');
 
 
獲取到日志后發現原因
ORA-01438: value larger than specified precision allowed for this column
; nested exception is java.sql.SQLException: ORA-01438: value larger than specified precision allowed for this column
 
OPERATORCREDITADJUSTLOG  表最大到999999 ,實際數量只有2W多, 單最大ID 已經到999992 ,造成這個原因是因為 SEQ 中設置了 cache =20 這個緩存失效 造成 SEQ 值的浪費 
 
最后 修改表結構可 設置 更大 的值,同時講 seq中的 cache 設置為0
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM