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

为什么仓库中的方法默认情况下并不都是事务性的

濮阳研
2023-03-14

我的存储库中的以下代码:

public interface ClientRepository extends CrudRepository<Client, Long> {

//@Transactional
@Modifying
@Query("update Client c set c.firstName = ?1, c.lastName = ?2, c.email = ?3 where c.id = ?4")
void updateClientInfoById(String firstname, String lastname, String email, Long userId);

使用REST服务执行这个方法(updateClientInfoById)会给我一个例外:javax。坚持不懈TransactionRequiredException:执行更新/删除查询

我必须添加@Transactional才能让它正常工作。

为什么存储库中的方法在默认情况下不都是事务性的?

提前感谢:)

共有1个答案

常睿范
2023-03-14

默认情况下,只有CRUD方法被标记为事务性方法。您正在使用自定义查询方法,因此应该使用@Transactional注释明确标记它。

此外,我们可以去掉方法的@Transactional注释,因为Spring数据JPA存储库实现的CRUD方法已经用@Transactional注释了。

有关更多信息,请参阅Spring Data JPA入门

编辑:CRUD方法是CrudRepository方法

 类似资料:
  • 问题内容: 谁能向我解释为什么Hibernate 默认情况下不设置注释,而是允许实体根据当前设置的属性生成INSERT? 什么是不使用的原因,因此默认情况下包括所有实体属性? 问题答案: @ jb-nizet说了什么。 另外,在我的书中是个坏主意。 从生成的SQL跳过空字段,很快您将发现自己处于声明列的情况,这实际上导致持久数据与休眠知道的实体数据不同。这会造成挫败感,并可能使您诉诸昂贵的电话。

  • 我正在做一个简单的ETL项目,它读取CSV文件,对每一列进行一些修改,然后将结果作为JSON写出。我希望读取我的结果的下游流程确信我的输出符合约定的模式,但我的问题是,即使我为所有字段定义了nullable=false的输入模式,空值也可能偷偷进入并破坏我的输出文件,而且似乎没有(performant)方法可以让Spark为我的输入字段强制执行‘not null’。 这似乎是一个功能,如下所述,在

  • 问题内容: 作为ASP.NET MVC 2 Beta 2更新的一部分,默认情况下不允许JSON GET请求。看来您需要将字段设置为从控制器返回对象之前。 这背后的原因是什么?如果我正在使用JSON GET尝试进行一些远程验证,那么我应该使用其他技术吗? 问题答案: DenyGet默认的原因是在MSDN上,该链接提供了Phil Haack的博客 的详细信息。看起来像跨站点脚本漏洞。

  • 问题内容: 谁能向我解释为什么Hibernate 默认将 Dynamic insert = false 设置为10,这是什么原因? 问题答案: @ jb-nizet说了什么。 另外,在我的书中是个坏主意。 从生成的SQL中跳过空字段,很快您将发现自己处于声明列的情况,这实际上导致持久数据与hibernate知道的实体数据不同。这会造成挫败感,并可能使您诉诸昂贵的电话。 例如假设列 并且您为映射到此

  • 问题内容: 试图了解熊猫某些功能背后的设计原理。 如果我有一个3560行18列的DataFrame,那么 是3560,但是 是18。 也许对于来自R的人来说这很自然;对我来说,感觉不太“ Pythonic”。是否在某处介绍了熊猫的基本设计原理? 问题答案: DataFrame主要是基于列的数据结构。在后台,DataFrame内部的数据存储在块中。大致来说,每个dtype都有一个块。 每列都有一个d