Hibernate 採用三級緩存策略,由內而外逐級生效:
<cache usage="read-write"/>。適合「讀多寫少、非關鍵數據」。hibernate.cache.use_query_cache=true 並在 Query 上調用 setCacheable(true)。<class name="Employee" table="EMPLOYEE">
<cache usage="read-write"/>
<id name="id" column="id"><generator class="native"/></id>
<property name="firstName" column="first_name"/>
...
</class>
<property name="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</property>
<cache name="Employee"
maxElementsInMemory="500"
eternal="true"
timeToIdleSeconds="0"
timeToLiveSeconds="0"
overflowToDisk="false"/>
| 策略 | 適用場景 |
|---|---|
| Transactional | 嚴格事務環境,極少更新,需絕對一致性 |
| Read-write | 讀多寫少,允許極短暫髒讀(默認推薦) |
| Nonstrict-read-write | 極少更新,容忍短暫不一致,性能最優 |
| Read-only | 只讀參考數據(如字典表),性能最佳 |
當 HQL 無法表達複雜查詢(如 Oracle CONNECT BY、分頁優化 Hint)時,可使用 session.createSQLQuery(sql)。
// 1. 標量查詢:返回 List
文中提供完整的 Employee 實體、建表 SQL、映射文件、配置文件及 ManageEmployee 主程式,涵蓋保存、標量查詢、實體查詢全流程,可直接部署驗證。
StatelessSession 繞過緩存,或定期 session.flush()/clear() 防止 OOM。