不能。 Hibernate 一級快取 和二級快取 皆駐留在 JVM 記憶體,與資料庫無即時同步機制。
graph TD
App[應用程式] --> L1[一級快取\n(Session 級\n生命週期=Transaction)]
App --> L2[二級快取\n(SessionFactory 級\n跨 Session 共享)]
L1 --> DB[(資料庫)]
L2 --> DB
Ext[外部工具\nSQL Client/ETL] --> DB
| 策略 | 適用場景 | 實作方式 |
|---|---|---|
| 版本欄位樂觀鎖 | 併發修改少、需防丟失更新 | @Version 欄位,自動比對版本號 |
| 手動 evict/refresh | 關鍵業務必須最新 | session.evict(entity); session.refresh(entity); |
| 二級快取設定超時/過期 | 可容忍秒級延遲 | Ehcache/Infinispan 設定 timeToLiveSeconds |
| 資料庫觸發器 + 通知機制 | 極高一致性需求 | PG NOTIFY / SQL Server Service Broker → 應用監聽並清快取 |
| 旁路快取 | 唯讀/極少寫入 | 唯讀查詢直接走快取,寫入同步更新快取 |
@Version),資料庫層面最後防線。