今天做了一個測試,發現Hibernate的dynamic-update只在兩種條件下生效:
1。同一session內,對已經persisit的對象進行update,這里的“已經persist”是指update之前先進行了create或者load調用。代碼示例:
Session session = openSession();
User user = (User)session.load(User.class,new Long(12));
user.setAddress(null);
session.update(user);
session.flush();
將hibernate配置成show_sql=true,可以看到update產生的sql語句。
2。不同session之間,update傳入的對象是另一個session中的persist對象(對該對象調用了create或者load方法)。代碼示例:
Session session1 = openSession();
User user = (User)session1.load(User.class,new Long(12));
Session session2 = openSession();
user.setAddress(null);
session2.merge(user);
session2.flush();
如果將session2.merge(..)改成update,則會更新所有可更新的屬性。