【发布时间】:2012-03-24 00:50:13
【问题描述】:
这可能是一个非常愚蠢的问题,但是……
我正在将 JPA 2.0 与 Hibernate 4 一起使用。我有一个包含许多字段的持久对象。
我在一个事务中创建并持久化它。然后,在另一个中,我查看该对象并更改其上一个字段的值:
try{
tx.begin();
MyObj object = myObjDAO.findById(objectId);
object.setFieldA("Different value");
} finally {
tx.commit();
}
JPA 在事务提交时会保留此更改,但我可以从我的 MySQL genquery.log 中看到它生成的更新语句涉及对象上的所有字段:
439 查询
/* update uk.co.core.objects.MyObj */ update myobj set created='2012-03-06 13:39:37', modified='2012-03-06 13:39:37', version=1 , fieldA='不同值', fieldB='originalValue', fieldC='originalValue' where id='objectId' and version=0; 439 查询提交
为什么它在查询中包含所有未更改的字段及其现有值,而不仅仅是:
update myobj set fieldA='different value', version=1, modified='somedate' where id='objectId' and version=0;
在这个示例中看起来可能没有太大区别,但我有一些具有更多字段的对象,所有这些都包含在它们的更新语句中。
即使纯粹从字符串数据量的角度来看,在更新查询中只包含更改的字段,难道不是更快/更有效吗?如果是这样,是否有配置选项可以做到这一点?
希望您能提供帮助,谢谢!
【问题讨论】: