hibernate 更新所有字段问题

来源:互联网 发布:365外勤软件下载 编辑:程序博客网 时间:2024/06/06 05:26

今天遇到一个问题;

在一个非事务方法A中,调用Bservice获取B对象;

对B对象的一个字段进行赋值,B.setB1("B1");

调用Bservice的update方法,update方法直接用hibernate的updateObject方法进行保存。

debug模式下,show-sql=true

结果发现:所有的字段都更新了,update B set B1=?,B2=?,B3=? where ....

这不符合我的需求,hibernate配置文件也已经设置了dynamic-update="true";

用了各种方法都不行;


后来发现一个帖子:http://bbs.csdn.net/topics/310254447


关键内容如下:

今天做了一个测试,发现Hibernate的dynamic-update只在两种条件下生效:

1。load进来的对象和被执行update的对象在同一个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。load进来的对象和被执行update的对象不在同一个session内,即要update的对象在另一个session中。代码示例:

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,则会更新所有可更新的属性。
 


尝试用第二种方法,merge再flush,解决问题!



dynamic-updatedynamic-update

0 0
原创粉丝点击