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);            // 若是不是更新
    }
}
相关文章
相关标签/搜索