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=?
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語句 把所有欄位都更改了一次。這樣要是我們有字段是文字型別,這個型別儲存的內容是幾千,幾萬字,這樣效率會很低。那麼怎麼只更...