1)get 和 load 的區別
1.執行get方法會立即加載對象
執行load方法,若不適用對象,不會立即執行查詢操作(即不會打印sql語句),而是返回一個代理類
get是立即檢索,load是延遲加載
2.load可能會拋出懶加載異常:LazyInitializationException ,異常:在需要初始化代理對象之前就已經關閉了session
3.若數據表中沒有對應的數據
get會返回null , load會拋出異常
2)save 方法
1.使一個臨時對象變爲持久化對象
2.爲對象非配ID
3.在flush緩存時會發送一條insert語句
4.在save方法之前設置id是無效的
5.持久化對象的id是不能被修改的
3)persist方法
當對一個OID(持久化對象id)不爲空的對象執行save方法時,會把該對象以一個新的對象保存到數據庫中,但執行persist方法時會拋出異常。
4)flush方法:使數據表裏的記錄和session緩存中的對象的狀態保存一致,爲了保存一致,則可能會發送對應的sql語句,
1. 在Transactioon 的 commit()方法中:先調用session的flush方法,再提交事物
2. flush方法會可能會發送SQL語句,但不會提交事物
3. 注意:在未提交事物或顯示的調用session.flush()方法之前,也有可能會進行flush()操作。
5)reflesh方法:跟flush相反,是把數據庫的數據同步到session緩存中去