hibernate虚拟字段 hibernate更新所有字段问题 - 刺猬明星娱乐网

hibernate虚拟字段 hibernate更新所有字段问题

来源:吃瓜网    作者:吃瓜网     2018-06-21 20:10:52   

今天遇到一个问题;

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

用了各种方法都不行;

关键内容如下:

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

1。load进来的对象和被执行update的对象在同一个session内,对已经persisit持久化的对象进行update时,这里的“已经persist”是指update之前已经进行了create或者load调用。代码示例:

Sessionsession=openSession();
Useruser=(User)session.load(User.class,newLong(12));
user.setAddress(null);
session.update(user);
session.flush();

将hibernate配置成show_sql=true,可以看到update产生的sql语句。

2。load进来的对象和被执行update的对象不在同一个session内,即要update的对象在另一个session中。代码示例:

Sessionsession1=openSession();
Useruser=(User)session1.load(User.class,newLong(12));

Sessionsession2=openSession();
user.setAddress(null);
session2.merge(user);
session2.flush();

如果将session2.merge(..)改成update,则会更新所有可更新的属性。

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