小編昨天寫了一些關於hibernate的教程,但是一直不能通過,小編也沒有太多時
間,加上很久沒有更新了,
今天小編就整理一下,小編遇到的幾個問題,
1,在hibernate生成實體類的時候,實現java.io.Serializable接口, 以支持對象序列
化,
並且在多表關聯上的時候不能懶加載,使用
1 fetch=FetchType.LAZY
否則在涉及多表關聯查詢的時候,裝入json時會報序列化錯誤,
2.hibernate中查詢時不需要事務的,在執行數據修改時出現 read-only時,是由
於事務沒有開啟,在整合中需要加入以下
1 在spring配置文件加上 2 3 4 5
6 在Dao層方法 加上@Transactional
3刷新緩存與髒檢查
commit將觸發刷新緩存操作(flush), 而刷新緩存實際上是把Session緩存中的對象的改變同
步到數據庫.
hibernate如何知道緩存中的持久態對象是否發生改變 ?
髒檢查! 受Session管理的持久態對象都會生成一個快照, 刷新緩存時, 將對象的各項信息
與快照進行對比, 如果不一致, 則該對象稱為髒對象, 所有髒對象上發生的改變都會同步到
數據庫.
4 hibernate把對象狀態分為三種:
1. 瞬時態(Transient)
不受Session管理的, 數據庫沒有記錄與之對應的對象, 是瞬時態對象
2. 持久態(Persistent)
受Session管理的對象, 是持久態對象
3. 遊離態(Detached), 也稱為"脫管"狀態
不受Session管理的, 數據庫有記錄與之對應的對象, 是遊離態對象
5 Session具有緩存:
save方法實際上是把對象放入緩存中
delete方法實際上是把對象從緩存中移除
關鍵字: 受Session管理 序列化 數據庫