有事務(wù)的情況下:
save方法執(zhí)行時(shí),并沒有真正的去執(zhí)行一條insert語句,而是僅僅從數(shù)據(jù)庫中獲取下一個(gè)id爷狈,并賦值給domain對象剿牺,獲取當(dāng)時(shí)domain對象信息的一個(gè)快照,計(jì)劃執(zhí)行一條insert語句颜价,然后在事務(wù)提交時(shí)才會(huì)去真正執(zhí)行該語句涯保,在真正執(zhí)行前,如果你向數(shù)據(jù)庫中插入一條記錄周伦,該記錄則會(huì)使用下一個(gè)id夕春,即domain對象雖然還沒有數(shù)據(jù)庫插入,但是已經(jīng)占據(jù)一個(gè)id了专挪。執(zhí)行完該insert語句后會(huì)發(fā)現(xiàn)當(dāng)前的domain對象和已經(jīng)持久化的domain對象是不一致的及志,然后就需要執(zhí)行一次update語句。
沒有事務(wù)的情況下:
save方法在沒有事務(wù)的情況下寨腔,仍然計(jì)劃執(zhí)行一條insert語句速侈,同時(shí)從數(shù)據(jù)庫中獲取一個(gè)可用id,雖然最終沒有insert迫卢,但是此id已被占用倚搬。
總結(jié):
當(dāng)使用save方法插入數(shù)據(jù)的時(shí)候,真正把數(shù)據(jù)持久化到數(shù)據(jù)庫其實(shí)執(zhí)行的是update語句乾蛤。