Session有幾個主要的方法:
1. Sava,persist儲存資料,persist在事務外不會產生insert語句。
2. delete刪除對象
3. update更新對象,如果資料庫沒有記錄,會出現異常
4. get根據id查,會立刻訪問資料庫
5. load根據id,返回的是代理,不會訪問資料庫
6. saveOrUpdate,merge(根據ID和version的值來確定是save或update)調用merge你的對象還是託管。
7. lock
實體物件的三種狀態:
1瞬時狀態:資料庫中沒有資料與其對應,超過範圍會被jvm記憶體回收行程回收,一般是new出來與session沒有關聯的對象
2.持久狀態:資料庫中有資料與之對應,與session有關聯
3,.脫管狀態:資料庫與資料與之對應,但當前沒有session與之對應
Hql和sql的區別
Hql是操作對象的,sql是操作關係的
常見的問題1
在資料庫能夠看見剛才錄入的記錄,但是當我再次插入的時候,那麼第一條的記錄就會被第二條的記錄覆蓋掉。這個可能和你的設定檔有關,在學習hibernate的時候,我們資料庫表都是自動產生的。當你在設定檔選用了create而不是update的時候,每次測試的時候都會重新建立。
常見的問題2、
如果映射類和資料庫裡面的表衝突,我們可以利用table屬性,對錶重新命名。
屬性衝突:可以利用clomus
常見的問題3
如果你的hql語句是這樣的尋找:from user as usertable where usertable.user=:n;
這句話的as的意思對將來的表進行重新命名, :n比預留位置更加科學。
Query.getstring(“n”,aa);
分頁查詢:
Query.setfristresults(20)//開始的合格語句
Query.setmaxresults(10);尋找10條
查詢有兩種:
一種query要寫hql語句的這個面向關係,官方建議
還有種 criteria這個類,這個更加物件導向。