Session(通常對應一次請求/事務)。load()、get()、save()、update()、HQL/ Criteria 查詢結果(實體)。session.flush()、session.refresh(entity)、session.evict(entity)、session.clear()。<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-ehcache</artifactId>
<version>5.6.x</version>
</dependency>
<property name="hibernate.cache.use_second_level_cache">true</property>
<property name="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</property>
<!-- 可選:查詢緩存 -->
<property name="hibernate.cache.use_query_cache">true</property>
@Entity
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE) // 或 NONSTRICT_READ_WRITE, READ_ONLY
public class User { ... }
<ehcache>
<defaultCache eternal="false" maxElementsInMemory="1000"
timeToIdleSeconds="300" timeToLiveSeconds="600" />
<cache name="com.entity.User" maxElementsInMemory="5000" />
</ehcache>
SessionFactory 就自動有二級緩存 → **錯**,必須顯式開啟 use_second_level_cache 並指定 RegionFactory。@Cache → 關聯集合不進二級緩存,仍發 SQL。一級緩存:開箱即用,Session 隔離。
二級緩存:需依賴、配置、註解三步走,SessionFactory 級共享。
生產環境建議按實體業務特性(讀多寫少用 READ_WRITE,極少變動用 READ_ONLY)精細配置策略與過期時間。