hibernate中的update方法只更新部分欄位的方法
阿新 • • 發佈:2019-01-30
Hibernate 中如果直接使用
Session.update(Object o);
會把這個表中的所有欄位更新一遍。
比如:
?1 2 3 4 5 6 7 8 9 10 11 12 |
public class TeacherTest
{<br>
@Test <br>
public void update(){<br>
Session
session = HibernateUitl.getSessionFactory().getCurrentSession();<br>
session.beginTransaction();<br> Teacher
t = (Teacher) session.get(Teacher. class ,
3 );<br>
t.setName( "yangtb2" );<br>
session.update(t);<br>
<br>
session.getTransaction().commit();<br>
}<br>
}<br>
|
Hibernate 執行的SQL語句:
?1 2 3 4 5 6 7 8 9 10 |
Hibernate:
<br> UPDATE<br>
Teacher
<br>
SET<br>
age=?,<br>
birthday=?,<br>
name=?,<br>
title=?
<br>
WHERE<br>
id=?<br>
|
這樣要是我們有欄位是文字型別,這個型別儲存的內容是幾千,幾萬字,這樣效率會很低。
那麼怎麼只更改我們更新的欄位呢?
有三中方法:
1.XML中設定property 標籤 update = “false” ,如下:我們設定 age 這個屬性在更改中不做更改
1 |
<property
name=”age” update=” false ”></property><br>
|
@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"
1 |
< class name= "com.sccin.entity.Student" table= "student" dynamic-update= "true" /><br>
|
但這樣的方法在Annotation中沒有
3.第三種方式:使用HQL語句(靈活,方便)
使用HQL語句修改資料 ?
1 2 3 4 5 6 7 |
public void update(){<br>
Session
session = HibernateUitl.getSessionFactory().getCurrentSession();<br>
session.beginTransaction();<br>
Query
query = session.createQuery( "update
Teacher t set t.name = 'yangtianb' where id = 3" );<br>
query.executeUpdate();<br>
session.getTransaction().commit();<br>
}<br>
|
Hibernate 執行的SQL語句:
Hibernate:
update
Teacher
set
name='yangtianb'
where
id=3
這樣就只更新了我們更新的欄位······