Hibernate update 只更新被修改字段

2021-07-03 14:38:10 字數 1497 閱讀 4748

hibernate 中如果直接使用

session.update(object o);

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

如果我們只更改了state屬性,而hibernate 的sql語句 把所有欄位都更改了一次。

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

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

有三種方法:

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

如有幾個欄位不做更改,需在相應property,增加

update=」false」

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

@column(updatable=false)

public int getstate()

@column(updatable=false)

public int getstate()

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

缺點:不靈活。如需要有多個字段指定不同的組合修改時不適用。

hibernate生成的sql語句,是指定修改欄位的:

hibernate: 

update

tdb.checkin 

setstate=?

where

id=?

(annotation 寫法 @column

(updatable=

false

) )

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

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

可以看出,hibernate生成的sql語句:

hibernate: 

update

tdb.checkin 

setmaddr=?,

mtime=?,

state=?,

ctime=?,

rec=?,

sid=? 

where

id=?

雖然set了多個字段,但資料庫更改的只是修改的字段。

但這樣的方法在annotation中沒有。

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

使用hql語句修改資料:

@override

public void updatestate(checkin ch)

hibernate 執行的sql語句:

hibernate: 

update

tdb.checkin 

setstate=?

where

id=?

這樣就只更新了我們所需要更新的字段!

hibernate update部分更新

hibernate update hibernate 中如果直接使用 session.update object o 會把這個表中的所有字段更新一遍。比如 view plaincopy to clipboardprint?public class teachertest public class t...

hibernate update部分更新

hibernate update hibernate 中如果直接使用 session.update object o 會把這個表中的所有字段更新一遍。比如 view plaincopy to clipboardprint?public class teachertest public class t...

Hibernate update 只更新被修改字段

hibernate 中如果直接使用 session.update object o 會把這個表中的所有字段更新一遍。如果我們只更改了state屬性,而hibernate 的sql語句 把所有欄位都更改了一次。這樣要是我們有字段是文字型別,這個型別儲存的內容是幾千,幾萬字,這樣效率會很低。那麼怎麼只更...