jpa 的 save 方法

錯誤代碼以下所示,當時寫的時候想着讓對象初始化的次數少一點,想着用一個對象。this

ScoreSummary scoreSummary = new ScoreSummary();
// 爲每一個班級新增成績彙總
for (Klass klass: courseArrangement.getKlassList()) {
    scoreSummary.setCourseArrangement(courseArrangement);
    scoreSummary.setKlass(klass);
    scoreSummaryRepository.save(scoreSummary);
}

後來潘老師評論說這樣只會保存一個對象,以後的會更新。才忽然想到這個問題,其實以前是有用到的code

logger.info("保存");
CourseArrangement assertCourseArrangement = courseArrangementService.save(courseArrangement);

logger.info("斷言保存成功");
assertThat(assertCourseArrangement.getId()).isNotNull();
logger.info("保存");
courseArrangementService.save(courseArrangement);

logger.info("斷言保存成功");
assertThat(courseArrangement.getId()).isNotNull();

你穿入的對象和你返回的是一個對象。orm

以後看了一下源碼,感受大概應該是我註釋的意思。對象

@Transactional
public <S extends T> S save(S entity) {
    if (this.entityInformation.isNew(entity)) { // 判斷是不是新建的實體 
        this.em.persist(entity);                // 若是是新增
        return entity;
    } else {
        return this.em.merge(entity);            // 若是不是更新
    }
}
相關文章
相關標籤/搜索