atitit.hbnt orm db 新新增更新最佳實務o99,ormo99
atitit.hbnt orm db 新新增更新最佳實務o99
1. merge跟個save了. 1
2. POJO對象處於游離態、持久態、託管態。使用merge()的情況。 1
3. @DynamicInsert @DynamicUpdate 2
4. 實際調用merge()產生的sql 2
5. 參考 2
1. merge跟個save了.
Update
UpdateorSave 已經不推薦了...
產生的黑頭子有個merge跟個save了...
2. POJO對象處於游離態、持久態、託管態。使用merge()的情況。
測試過程中游離態、持久態、有用
1、游離態ID為空白,資料庫肯定不存在,調用merge(),直接插入資料庫。
2、持久態,pojo對象從資料庫中取出的行記錄,調用merge(),自動比較該對象和資料庫物件是否發生更改,是則更新該行記錄。
3、託管態,通過編程的方式指定ID,程式構造的POJO對象,調用merge(),自動比較資料庫該ID行記錄與POJO對象的屬性。不一樣則更新。
但通過程式構造的POJO對象,並指定ID。但POJO的ID為native,並指定了資料庫的sequence,調用merge()後,程式指定的ID,還是會被改成新的序列ID,則,該POJO對象還是成了ID不為空白、資料庫不存在該ID的游離態。
作者:: 老哇的爪子 Attilax 艾龍, EMAIL:1466519819@qq.com
轉載請註明來源: http://blog.csdn.net/attilax
3. @DynamicInsert @DynamicUpdate4. 實際調用merge()產生的sql
首先select在up
select gvmaterial0_.material_id as material1_0_0_, gvmaterial0_.application_type as applicat2_0_0_, gvmaterial0_.can_down_org as can3_0_0_, gvmaterial0_.create_time as create4_0_0_, gvmaterial0_.effectie_time as effectie5_0_0_, gvmaterial0_.failure_time as failure6_0_0_, gvmaterial0_.file_path as file7_0_0_, gvmaterial0_.material_description as material8_0_0_, gvmaterial0_.material_type as material9_0_0_, gvmaterial0_.play_time as play10_0_0_, gvmaterial0_.size as size0_0_, gvmaterial0_.update_time as update12_0_0_, gvmaterial0_.update_user as update13_0_0_ from gv_material gvmaterial0_ where gvmaterial0_.material_id=1
32 Query update gv_material set play_time=125 where material_id=1
5. 參考
Hibernate更新某些欄位的幾種update方法 - zb0567的專欄 - 部落格頻道 - CSDN.NET.htm