当前位置: 首页 > 知识库问答 >
问题:

SpringBoot JPA在@Transactional上不需要.save()吗?[副本]

郤仰岳
2023-03-14

我有一个简短问题:

是否需要对@transaction方法调用repo.save(x)

示例:

@Autowired
private UserRepo repo;

@Transactional  
@PutMapping
public Long put(@RequestBody User user)
{
  User u = repo.findOne(user.getId());
  u.setName("Paul");
  repo.save(u); // DO I NEED THIS LINE?
}

我只是不太确定,所以也许有人能在这个问题上说点什么?

共有1个答案

贺浩壤
2023-03-14

如果您检索一个实体,例如使用事务方法内的findone方法调用,则该实体从那时起就由持久性提供程序管理。

现在,如果您对该实体(实际上是一个代理对象)进行了任何更改,则在事务提交时,这些更改将持久化到数据库中,而不管调用saveupdate方法。

当您从头创建新实体而持久性提供程序还不知道它的存在时,必须使用savepersist

请记住,如果在更改发生之前对特定实体使用detachevict方法,则可以防止在提交时进行任何更改。

 类似资料:
  • 根据文件,https://github.com/gulpjs/gulp/blob/master/docs/getting-started.md $npm安装--节省开发成本 到目前为止,我使用的所有npm模块都使用

  • 我有个简单问题。我是否需要手动退订或者angular正在为我做这件事,或者如果不知道发生了什么? 多谢了。

  • 我上了Java的课程,正在努力自学C和K 在Java中,您可以声明一个类似于公共静态浮点转换(int f)的函数,而不需要原型。这对我来说似乎简单得多。为什么会有差异?

  • 我在windows 7上用过android Studio,每次我安装android Studio时,我必须先安装jdk和配置环境路径。但是在windows 10中,当我安装android Studio时,它没有要求我使用jdk,我可以使用android Studio,没有任何问题还在我的手机上安装了一个应用程序,一切正常。 我去cmd检查jdk是否安装了,我输入java版本和javac,但都出现了

  • 问题内容: 据我了解,使用a的“正确”方法是始终在退出块之前调用。像这样: 但是,我已经看到,没有它,代码就可以工作,甚至我从中也学会了使用它的答案 。所以我的问题是,是否必须使用它? 问题答案: 所以我的问题是,是否必须使用它? 为了进行交易而进行更新时必须使用。否则,事务管理器将发出并撤消所做的更改。 对于像您的示例这样的只读事务,无论有没有,我都认为没有实质性的区别。在这两种情况下,由事务管

  • 问题内容: 我的春季启动应用程序中有一个存储库类。首先,我用添加了注释,然后实现了。现在我摆脱了注释,它仍然有效。 我看到有注释。 这是如何运作的?还是这不行,我的应用程序中发生了一些奇怪的事情? 问题答案: 确实没有必要将注释放在扩展的接口上;Spring通过扩展预定义接口之一来识别存储库。 注释的目的是防止Spring本身将该特定接口视为存储库。该接口具有此批注,因为它本身不是存储库,它是由您