首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Struts 異常:ORA-00001 唯一約束違反 (PK_USER_LOGINLOG_ID) 解決方案

     編輯:程式設計綜合問答

問題現象

在 Java Web 專案(Struts + Hibernate + Oracle)中執行批次更新時,拋出以下異常:

Struts Problem Report
Struts has detected an unhandled exception:
Messages: ORA-00001: unique constraint (REQUIREMENTS.PK_USER_LOGINLOG_ID) violated
Could not execute JDBC batch update
Could not execute JDBC batch update; nested exception is org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update
File: oracle/jdbc/driver/DatabaseError.java
Line number: 342

原因分析

ORA-00001 表示試圖插入的資料違反了唯一約束條件。具體到這裡,主鍵 PK_USER_LOGINLOG_ID 發生了重複。常見原因包括:

  • 手動指定的主鍵 ID 與資料庫現有資料衝突。
  • Hibernate 的 ID 生成策略(如 sequence、identity)配置錯誤,導致生成重複值。
  • 在同一個事務中多次持久化同一個實體,或未正確處理脫管狀態對象。

解決建議

  1. 檢查主鍵生成策略:確認 <generator> 配置正確,Oracle 建議使用 sequence。
  2. 排除手動賦值:若代碼中手動 setId(),請移除,交由框架管理。
  3. 檢查序列:資料庫端 Sequence 當前值是否小於表中最大 ID,需調整 SELECT seq.nextval FROM dual 推進序列。
  4. 批次處理邏輯:若使用 session.save() 循環插入,請定期 flush() 和 clear(),避免快取導致的重複提交。

修正後重新部署測試即可恢復正常。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved