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

Hibernate 插入報錯「Connection is read-only」:事務配置缺失或數據源只讀

     編輯:程式設計綜合問答

異常堆棧關鍵


Caused by: java.sql.SQLException: Connection is read-only. Queries leading to data modification are not allowed

原因分析

  1. 事務管理缺失:Service 方法未標註 @Transactional,或事務管理器未正確配置,導致 Hibernate 獲取的連接默認只讀。
  2. 數據源配置:DriverManagerDataSource 或連接池 (DBCP/Hikari) 設置了 readOnly=true。
  3. SessionFlushMode:session.setFlushMode(FlushMode.MANUAL) 未手動 flush()。

解決步驟

  1. 檢查 Service 層:
    
      @Service
      @Transactional // 必須
      public class ProductServiceImpl {
          public void insert(Product p) { dao.save(p); }
      }
      
  2. 檢查 Spring 配置:
    
      
      
          
      
      
  3. 檢查數據源:確保 dataSource bean 無 readOnly 屬性或為 false。

調試技巧

在 DAO 保存前打印:


Session session = sessionFactory.getCurrentSession();
Connection conn = session.connection();
System.out.println("Conn readOnly: " + conn.isReadOnly());
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved