Hibernate3中的更新與刪除

2021-08-22 01:38:35 字數 2004 閱讀 1285

在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的配...