hibernate 更新所有字段问题

今天遇到一个问题;

在一个非事务方法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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值