HIbernate數據動態更新

當spring整合hibernate以後事務就會被spring進行託管,那麼當你在一個get一個對象以後在進行set對象時候你發現,事務提交後會執行一段update語句,數據庫中的值也會改變,這就是動態更新。就是說,你的查詢和賦值同時在一個相同的session中進行的,hibernate根據id判斷是同一個對象,因此會自動更新相應的屬性值。 java


其實自動更新只是爲了提升效率。 如果你不想讓它自動更新,大家可採起如下方法: 在映射文件相應屬性中設置update="false"能夠不用更新該字段或者是在映射文件中的class標籤裏面加上:dynamic-insert="false" spring

就像下邊這樣: sql

<class name="com.orm.UserInfo"     table="user_info"     數據庫

         dynamic-update="false"     session

         dynamic-insert="true"    spa

         optimistic-lock="version">hibernate


SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
session = HibernateUtil.openSession();
session.beginTransaction();
User u = new User();
u.setBorn(new Date());
u.setUsername("zhangsan");
u.setPassword("zhangsan");
session.save(u);
u.setPassword("222");           
//該條語句沒有意義            
session.save(u);
u.setPassword("zhangsan111");           
//沒有意義            
session.update(u);
u.setBorn(sdf.parse("1988-12-22"));            
//沒有意義            
session.update(u);
session.getTransaction().commit();

這個時候會發出多少sql語句呢?仍是一樣的道理,在調用save方法後,u此時已是持久化對象了,記住一點:若是一個對象以及是持久化狀態了,那麼此時對該對象進行各類修改,或者調用屢次update、save方法時,hibernate都不會發送sql語句,只有當事物提交的時候,此時hibernate纔會拿當前這個對象與以前保存在session中的持久化對象進行比較,若是不相同就發送一條update的sql語句,不然就不會發送update語句code

Hibernate: insert into t_user (born, password, username) values (?, ?, ?)
Hibernate: update t_user set born=?, password=?, username=? where id=?

這樣
orm

相關文章
相關標籤/搜索