這可能是一個非常愚蠢的問題,但...爲什麼JPA生成的更新查詢包含比必要的字段更多的字段?
我使用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查詢
/*更新uk.co.core.objects.MyObj * /更新MyObj中集創建= '2012-03-06 13時39分37秒' ,modified ='2012-03-06 13:39:37',version = 1,fieldA ='Different value',fieldB ='originalValue',fieldC ='originalValue'其中id ='objectId'和版本= 0; 439查詢提交
爲什麼它包括所有不變字段及其現有值查詢,而不僅僅是:
更新MyObj中設置FIELDA =「不同的價值」,版本= 1, modified ='somedate'其中id ='objectId'和version = 0;
這個例子看起來可能沒有太大區別,但我有一些對象具有更多字段,所有這些對象都包含在它們的更新語句中。
即使純粹從字符串數據的角度來看,更新查詢中只包含更改的字段,它會不會更快/更高效?如果是這樣,是否有一個配置選項可以讓它這樣做?
希望你能幫忙,謝謝!
一個專門的** HQL **是一個好主意,當你確切知道要更新什麼時,無論版本。但是恐怕你的解決方案可能是**性能開銷,因爲對象必須加載到內存中,然後應該進行比較**。 – ManuPK 2012-03-06 14:37:59