java - @Transactional spring JPA .save() 没有必要吗?

标签 java spring jpa transactional-database

我明白如果我们使用注释@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() 将实体附加到 session ,并且在事务结束时,只要没有异常,它就会全部保存到数据库中。

  • 现在,如果您从数据库获取对象(例如 ObjectEntity objectEntity = objectRepository.find();),则该对象已附加,您无需再调用 save() 方法。

  • 但是,如果对象已分离(例如 ObjectEntity objectEntity = new ObjectEntity();),则您必须使用 save() 方法才能将其附加到 session ,以便对其所做的更改保存到数据库中。

关于java - @Transactional spring JPA .save() 没有必要吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61460187/

相关文章:

java - Hibernate 在 Oracle 中使用序列生成器和序列

java - 复制二维字符串 ArrayList

javax.el.E​​LException : Error reading [name] on type Person

mysql - 通过 JPA 从 MySQL 获取给定行的行号

java - 与 Spring 和 JPA 的事务

java - 如何修复 CrudRepository.save(java.lang.Object) 在 springboot 中没有访问器方法?

java - JPA 自引用实体

java - 无法从 JSON 转换;意外字符 ('f'(代码 102)): Expected space separating root-level values at (String )"5f19a7e99933db43cb23e83d"

java - 尝试引用 Activity 中 fragment 的按钮

java - 安卓 : get all JSON values froma a certain category