Hibernate中update方法的注意點

2021-07-03 21:27:19 字數 1450 閱讀 5421

hibernate 中如果直接使用

session.update(object o);

會把這個表中的所有字段更新一遍。

public class teachertest

}hibernate 執行的sql語句:

hibernate:

update

teacher

setage=?,

birthday=?,

name=?,

title=?

where

id=?

語句 把所有欄位都更改了一次。

這樣要是我們有字段是文字型別,這個型別儲存的內容是幾千,幾萬字,這樣效率會很低。

那麼怎麼只更改我們更新的字段呢?

有三中方法:

1.xml中設定property 標籤 update = 「false」 ,如下:我們設定 age 這個屬性在更改中不做更改

在annotation中 在屬性get方法上加上@column(updatable=false)

@column(updatable=false)

public int getage()

@column(updatable=false)

public int getage()

我們在執行 update方法會發現,age 屬性 不會被更改

hibernate:

update

teacher

setbirthday=?,

name=?,

title=?

where

id=?

hibernate:

update

teacher

setbirthday=?,

name=?,

title=?

where

id=?

缺點:不靈活····

2.第2種方法··使用xml中的 dynamic-update=」true」

view plaincopy to clipboardprint?

ok,這樣就不需要在字段上設定了。

但這樣的方法在annotation中沒有

3.第三種方式:使用hql語句(靈活,方便)

使用hql語句修改資料

view plaincopy to clipboardprint?

public void update()

public void update()

hibernate 執行的sql語句:

hibernate:

update

teacher

setname=』yangtianb』

where

id=3

hibernate:

update

teacher

setname=』yangtianb』

where

id=3

SQLSERVER中 多表鏈結的UPDATE 方法

錯誤方式 update 歷史庫存 inner join 平均單價 on 歷史庫存.產品編號 平均單價.產品編號 set 歷史庫存.期末金額 round 平均單價.領用平均單價 歷史庫存.期末數量,0 正確方式 update 歷史庫存 set 歷史庫存.期末金額 round 平均單價.領用平均單價 歷...

hibernate中generator屬性的意義

1 identity 用於mysql資料庫。特點 遞增 注 對於mysql資料庫使用遞增序列時需要在建表時對主鍵指定為auto increment屬性。2 sequence 用於oracle資料庫 序列名3 native 跨資料庫時使用,由底層方言產生。default.sequence為hibern...

hibernate中取得connection的方法

在hibernate3中,使用了c3p0連線池,嘗試了多種辦法取得connection物件,以下兩種可以使用。connection conn 方法1 hibernate4中將要廢棄這個方法 conn session.connection 方法2 這個方法也可以用,速度稍慢 sessionfactor...