java - @Transactional spring JPA .save() 不需要吗?
问题描述
我知道如果我们使用注释@Transactional。“save()”方法不是必需的。准确吗?
对于我的例子:
@Transactional
void methodA() {
...
ObjectEntity objectEntity = objectRepository.find();
methodB(objectEntity);
}
void methodB(ObjectEntity obj) {
...
obj.setName("toto");
objectRepository.save(obj); <-- is it necessary?
}
谢谢你的帮助
解决方案
它的工作原理如下:
save()
将实体附加到会话并在事务结束时,只要没有异常,它将全部持久化到数据库中。现在,如果您从数据库中获取对象(例如
ObjectEntity objectEntity = objectRepository.find();
),那么该对象已经附加,您不需要调用 save() 方法。但是,如果对象是分离的(例如
ObjectEntity objectEntity = new ObjectEntity();
),那么您必须使用 save() 方法将其附加到会话,以便对其所做的更改持久保存到数据库中。