1. 程式人生 > >hibernate update 只更新部分欄位的3種方法(轉載)

hibernate update 只更新部分欄位的3種方法(轉載)

hibernate 中如果直接使用
Session.update(Object o);
會把這個表中的所有欄位更新一遍。

比如:

public class Teacher Test {
    @Test
    public void update(){ 
        Session session = HibernateUitl.getSessionFactory().getCurrentSession();
        session.beginTransaction();
        Teacher t = (Teacher) session.get(Teacher.class
,3); t.setName("yangtb2"); session.update(t); session.getTransaction().commit(); } }

Hibernate 執行的SQL語句:
程式碼

Hibernate:
UPDATE
Teacher 
SET
age=?,
birthday=?,
name=?,
title=? 
WHERE
id=?

我們只更改了Name屬性,而Hibernate 的sql語句 把所有欄位都更改了一次。
這樣要是我們有欄位是文字型別,這個型別儲存的內容是幾千,幾萬字,這樣效率會很低。
那麼怎麼只更改我們更新的欄位呢?
有三種方法:

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



在Annotation中 在屬性GET方法上加上@Column(updatable=false)

@Column(updatable=false)
public int getAge() {
return age;
}

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

Hibernate:
UPDATE
Teacher
SET
birthday=?,
name=?,
title=?
WHERE
id=?

缺點:不靈活····

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

<classname="com.sccin.entity.Student"table="student"dynamic-update="true"/>

OK,這樣就不需要在欄位上設定了。
但這樣的方法在Annotation中沒有

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

使用HQL語句修改資料
public void update(){
Session session = HibernateUitl.getSessionFactory().getCurrentSession();
session.beginTransaction();
Query query = session.createQuery("update Teacher t set t.name = 'yangtianb' where id = 3");
query.executeUpdate();
session.getTransaction().commit();
}

Hibernate 執行的SQL語句:
Hibernate:
update
Teacher
set
name='yangtianb'
where
id=3

這樣就只更新了我們更新的欄位·····

相關推薦

hibernate update 更新部分3方法(轉載)

hibernate 中如果直接使用 Session.update(Object o); 會把這個表中的所有欄位更新一遍。 比如: public class Teacher Test { @Test public void update(){ Session session

hibernate update 更新部分3方法

Hibernate 中如果直接使用 Session.update(Object o); 會把這個表中的所有欄位更新一遍。 比如: public class TeacherTest { @Test public void update(){

使用hibernate執行原生update更新資料(更新部分

事務根據實際情況進行新增,這裡不特殊說明 1、使用update執行更新部分欄位 String sql = " update  A set  a.grade= :grade,a.gradeType =

hibernate中的update方法更新部分方法

Hibernate 中如果直接使用 Session.update(Object o); 會把這個表中的所有欄位更新一遍。 比如: ? 1 2 3 4 5 6 7 8 9 10 11 12 public class Teacher

hibernate update 更新部分字段的3方法(其實我想說第二

day query per 分享 cci bar .exe toc 技術分享 hibernate 中如果直接使用Session.update(Object o);會把這個表中的所有字段更新一遍。 比如: public class Teacher Test {

Hibernate update 更新被修改

2012-11-21 11:16:48|  分類: 預設分類 |  標籤: |字號訂閱 Hibernate 中如果直接使用 Session.update(Object o); 會把這個表中的所有欄位更新一遍。 如果我們只更改了state屬性,而Hib

Hibernate——update-更新被修改的

方法一:(不好,因為不靈活) 使用註解: 在不希望被更新的欄位對應的屬性的getXXX()方法上註解:@Column(updatable=false) 使用XML:

Hibernate——僅更新部分

介紹兩種方法 1.Annotation設定@Column(updatable=false) 在不需要更新的屬性上新增這個註解。這種方法不靈活,很少使用。 2.使用HQL @Test public

Qt中SQL語句update同時更新及設定值為空的方法

Qt中往往需要對資料庫進行操作,常出現根據某變數更改相關欄位的內容。一般地,可以採用名稱繫結和位置繫結兩種方法。 本文以update舉例,其他insert等語句操作類似。 方法一:名稱繫結 已知:定義Qstring型別變數a b c d e f g h。

關於mybatis多表查詢查詢部分,而丟失一整條資料問題

今天在寫一個list資料按某欄位排序問題時遇到了一個問題,就是有很多個數據這個欄位一樣時,只會查出來一個。 如下 頁面,5條資料只查出來3條資料 基礎資訊和接單什麼資訊的分成了2個表,根據接單數排名 select e.engineer_name,

解決問題:Spring Date JPA 更新部分

在Spring Data JPA 中,新增和更新操作都是用save()的方式進行,JPA是通過什麼方法來知道我們是要進行insert還是update呢? 經過測試,JPA對程式呼叫的save()方法判斷是updata或者insert操作的依據是看實體物件的主鍵是否被賦值。

Hibernate中用hql查詢部分

在hibernate中,用hql語句查詢實體類,採用list方法的返回結果為一個List,該List中封裝的物件分為以下三種情況: 1.查詢全部欄位的情況下,如"from 實體類",list中封裝的物件為實體類本身,各屬性都將得到填充。 2.只查詢一個欄位,預設情況下

Hibernate中用hql查詢部分 可解決異常java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to

hql查詢單表部分欄位: 在hibernate中,用hql語句查詢實體類,採用list方法的返回結果為一個List,該List中封裝的物件分為以下三種情況: 1.查詢全部欄位的情況下,如"from 實體類",list中封裝的物件為實體類本身,各屬性都將得到填充。 2.只查詢一個欄位,預設情況下,list中封

使用hibernateTemplate模板執行更新一個的操作

之前做課程設計一直都用這hibernateTemplate模板,感覺的確很省程式碼,但是突然做到一個功能只更新一個欄位。頓時有點懵逼,啥東西都試了,就是不行。百度了一下發現了一個方法,在這裡分享一下。 思路是這樣子的:先根據一個id去查詢全部資訊,然後在set單個欄位進去直

關於更新部分屬性,Hibernate更新某些的幾update方法

 1.在hbm.xml中設定property 標籤 update = “false” 例如     <property name=”age”update=”false”></property>     我們在執行 Update方法會發現,age 屬

Hibernate插入資料時取的預設值,更新更新修改過的屬性值

         使用Hibernate向資料庫插入或更新資料的時候 ,如果想要取到資料庫欄位的預設值,可以在類的Hibernate對映檔案的Class標籤中加上dynamic-insert和dynamic-update。如果資料庫欄位是可以為空且有預設值 的情況下,只要在

Hibernate更新某些的幾update方法

Hibernate 中如果直接使用 Session.update(Object o); 會把這個表中的所有欄位更新一遍。 比如: view plaincopy to clipboardprint? public class TeacherTest { @Test

EF部分更新,自動忽略null

原文: EF部分欄位更新,自動忽略null欄位  某個專案裡的update程式碼是類似這樣的 public T Update<T>(T entity) where T : ModelBase { var set = t

Thinkphp3.2.3 修改一個的值

$result = M('Hd')->where("hd_id = '$hd_id'")->setField('hd_like', ‘測試的值’); 成功後,返回值可能為0,所以判斷要用以下方式 if($result !== false){ echo '資料更

hibernate查詢資料庫char型別返回一個字元

hibernate查詢資料表char型別欄位只返回一個字元 在oracle或sqlServer下會遇到,查詢資料表字段型別為char,如果使用Hibernate原生SQL去執行查詢,往往只會返回 一