今天做了一個測試,發(fā)現(xiàn)Hibernate的dynamic-update只在兩種條件下生效:
1。同一session內(nèi),對已經(jīng)persisit的對象進(jìn)行update,這里的“已經(jīng)persist”是指update之前先進(jìn)行了create或者load調(diào)用。代碼示例:
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產(chǎn)生的sql語句。
2。不同session之間,update傳入的對象是另一個session中的persist對象(對該對象調(diào)用了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,則會更新所有可更新的屬性。