Spring Data JPA 自動(dòng)更新數(shù)據(jù)

描述:實(shí)體對(duì)象屬于托管狀態(tài)下時(shí),往這個(gè)對(duì)象里面的某個(gè)屬性 set 新的值,這個(gè)新的值會(huì)被更新到數(shù)據(jù)表中去。

使用 EntityManager.contains(entity) 方法可以得知某個(gè)實(shí)體對(duì)象是否處于托管狀態(tài),也就是說是否處于 persistence context 中。
使用 EntityManager.clear() 方法可以將處于 persistence context 范圍中的托管對(duì)象變?yōu)橛坞x對(duì)象,這時(shí)重置屬性值不會(huì)更新到數(shù)據(jù)表中去。

persistence context 有兩種類型。一種稱為 transaction-scope persistence context,在這種狀態(tài)下 persistence context 是與事務(wù)相關(guān)的,也就是說在事務(wù)范圍內(nèi)托管對(duì)象所有的更改都會(huì)被更新到數(shù)據(jù)表中去,當(dāng)事務(wù)提交后,這個(gè) persistence context 也就銷毀了,之后的更改不會(huì)被更新到數(shù)據(jù)表中去。

另一種稱為 extended persistence context,在這種狀態(tài)下 persistence context 并不會(huì)因事務(wù)提交而銷毀,而是可以跨事務(wù)的,具體的銷毀與客戶端請求有關(guān),一般用于 Stateful Session Bean 中。

一般使用的 persistence context 都是默認(rèn)的 transaction-scoped,extended 的很少用到。

在 transaction-scoped 環(huán)境中,受托管的實(shí)體對(duì)象并在事務(wù)環(huán)境中,這時(shí)重置屬性值會(huì)更新到數(shù)據(jù)表中去。如果實(shí)體對(duì)象為游離對(duì)象,也就是說已經(jīng)從 persistence context 游離出來了,這時(shí)重置屬性值不會(huì)更新到數(shù)據(jù)表中去,如果需要將游離對(duì)象重置的值更新到數(shù)據(jù)表中去,需要使用 EntityManager#merge(entity) 方法,將該游離對(duì)象納入當(dāng)前 persistence context 的管轄之中重新成為托管對(duì)象。

@PersistenceContext private EntityManager entityManager;

...{
---省略代碼---
ScorePoint scorePoint = scorePointSecDao.findScorePointById(groupId,scorePointId);
if(entityManager.contains(scorePoint)){
logger.info("實(shí)體對(duì)象屬于托管狀態(tài)下時(shí),往這個(gè)對(duì)象里面的某個(gè)屬性 set 新的值,這個(gè)新的值會(huì)被更新到數(shù)據(jù)表中去。"

  • "使用 EntityManager#contains(entity) 方法可以得知某個(gè)實(shí)體對(duì)象是否處于托管狀態(tài),也就是說是否處于 persistence context 中");
    entityManager.clear();
    logger.info("entityManager.clear()方法被調(diào)用,已經(jīng)被清理");
    }

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容