在hibernate2中對某個表進行更新和刪除,必須先把它load出來,在後更改,然後再儲存。
這個過程對於批量操作或者對於表關係比較複雜的情況,是很複雜的。
在hibernate3中hql語句中已經支援update 和delete 了
但是要注意的是update和delete的hql不是物件導向的了。你用物件方式的語句返回會出錯。
下面是乙個簡單的例子。
用物件的方式,不用hql:
session session
=getsession();
customer host
=(customer) session.load(customer.
class
,hostemail);
customer guest
=(customer)session.load(customer.
class
,guestemail);
contactid id
=new
contactid(host,guest);
contact contact
=(contact)session.load(contact.
class
,id);
relationship relation
=(relationship)session.load(relationship.
class, 2
);contact.setrelationship(relation);
contact.setupdatetime(calendar.getinstance().gettime());
session.flush();
session.close();
用hql:
private
static
final
string hql_badguy_to_friend ="
update contact set relation_id = 1, updatetime = :updatetime where host = :hostemail and guest = :guestemail";
session session
=getsession();
query query
=session.createquery(hql_badguy_to_friend);
query.setstring(
"hostemail
",hostemail);
query.setstring(
"guestemail
",guestemail);
query.setdate(
"updatetime
",calendar.getinstance().gettime());
query.executeupdate();
session.close();
如果你把hql寫成這個樣子:
update contact as c set c.relationship.relationid =1 ......
反而會出錯,也就是說,你就按照native sql去寫就行了。
還有,如果能使用這樣的功能
hibernate.query.factory_class = org.hibernate.hql.classic.classicquerytranslato***ctory
這個hibernate配置屬性要不去掉,要不換成org.hibernate.hql.ast.astquerytranslato***ctory
上面那個是支援hibernate2的。
但是有一點要注意,如果你用update語句來做的話,可能產生快取同步問題,而且兩種方法最後hibernate執行的語句差不多,對於第一種方法hibernate也是就生成一條update語句,當然因為我是根據主鍵來update的,如果批量處理的話還是用update hql快。
Hibernate 3 事務 查詢
二 查詢 三 1099占用解決方案 既然hibernate要和資料庫互動,那麼事務是必須要掌握的部分 為什麼要鎖 在併發訪問的時候,不使用鎖會導致部分資料並不能儲存到資料庫 private int version 版本號 public void setversion int version publ...
hibernate3中的離線查詢1
假設要通過stuname查詢乙個學生student記錄,可以如下 detachedcriteria dc detachedcriteria.forclass student.class dc.add restrictions.like stuname stuname,matchmode.anywhe...
Hibernate 3 中文亂碼的解決
最近在專案中遇到了乙個問題,就是做查詢的時候,如果使用者輸入中文的話,明明資料庫有這樣的記錄,卻怎麼也檢索不到結果。作為除錯的手段,我把hql語句列印出來,也沒有發現什麼問題,和預期的一樣。甚是鬱悶,後來,上網查了一下資料,原來是hibernate3對中文的支援不是太好,需要在hibernate的配...