今天做了一个测试,发现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,则会更新所有可更新的属性。