hibernate update部分更新

2022-08-24 12:27:10 字數 2298 閱讀 3832

hibernate update

hibernate 中如果直接使用

session.update(object o);

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

比如:view plaincopy to clipboardprint?

public class teachertest  

}

public class teachertest

}hibernate 執行的sql語句:

view plaincopy to clipboardprint?

hibernate: 

update 

teacher 

set 

age=?, 

birthday=?, 

name=?, 

title=? 

where 

id=?

hibernate:

update

teacher

set

age=?,

birthday=?,

name=?,

title=?

where

id=?

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

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

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

有三中方法:

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

view plaincopy to clipboardprint?

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

view plaincopy to clipboardprint?

@column(updatable=false) 

public int getage()

@column(updatable=false)

public int getage()

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

view plaincopy to clipboardprint?

hibernate: 

update 

teacher 

set 

birthday=?, 

name=?, 

title=? 

where 

id=?

hibernate:

update

teacher

set

birthday=?,

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語句:

view plaincopy to clipboardprint?

hibernate: 

update 

teacher 

set 

name='yangtianb' 

where 

id=3

hibernate:

update

teacher

set

name='yangtianb'

where

id=3

這樣就只更新了我們更新的字段······

1、使用hidden標籤,把不需要的字段也查出來,然後在返回去。

2、再查一邊資料庫,宣告乙個新的物件,再把頁面傳過來的資料set進去,儲存這個新宣告的物件

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

Hibernate update 只更新被修改字段

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