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

使用JpaRepository更新时的事务提交错误

笪涛
2023-03-14

我使用jpaRepository删除通知方法。

public Notice deleteNotice(int id) {
    Notice notice = noticeRepository.findByIdAndVisible(id, true)
            .orElseThrow(() -> new EntityNotFoundException(String.valueOf(id)));
    
    notice.setVisible(false);
            
    return noticeRepository.save(notice);   
}

并且有一个实体文件。

@Entity
@Getter
@Setter
@Builder
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class Notice {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;
    
    @Size(min=4, max=10, message="Title should have at least 4 characters")
    private String title;
    
    @JsonIgnore
    private boolean visible;
}

当我尝试在控制器中删除通知时,

@DeleteMapping("/notice/{noticeId}")
public ResponseEntity<Object> deleteNotice(@PathVariable int noticeId){
    return ResponseEntity.ok(noticeService.deleteNotice(noticeId));
}

我得到一个错误“无法提交JPA事务;嵌套异常为javax . persistence . roll back exception:提交事务时出错。< br >我可以就这个问题得到一些建议吗?

共有1个答案

林弘壮
2023-03-14

将@transactional放在服务类上。

当实体管理器检索到的实体处于持久状态并且在您要提交时进行更改后,该实体仍在被另一个程序使用时,可能会出现此错误。有关其他信息

stackoverflow也有类似的问题

 类似资料:
  • 我正在使用Guice注入EntityManager。当我提交注入实体管理器的操作时,BD端没有发生任何事情:没有事务通过!!!你能帮我弄清楚发生了什么吗? 这是我的代码: 网状物xml Inject torListener类: 持久性模块类: GuiceModule类: RestModule类: 公共类RestModule扩展了JerseyServletModule{ 最后是网络服务(jeresy

  • 问题内容: 如何使用来更新div并进行部分提交,我以前曾经通过将ajax属性设置为true并将update属性设置为:statusBlock(其中id 为statusBlock)来进行部分提交。我在设计方面遇到问题,因此无法使用它,因此必须使用。 问题答案: 这可以通过在其中嵌套一个来完成。 实际上, 与…完全相同 请注意,与PrimeFaces等效项的细微差别在于,PrimeFaces 在流程/

  • 问题内容: 由于某些原因,我已经使用Spring PlatformTransactionManager手动执行了事务提交和回滚操作,我需要做的是设置一个钩子,以便在事务提交后执行后提交操作。 通过查看: 我没有看到我能确定交易是否成功,除了假设它没有假想。 而且我可以将AOP作为一种选择,但是以编程方式进行操作,也许使用回调方法呢? 问题答案: 你可以得到你想要什么以更简单的方式,和 使用,您可以

  • 我在我的项目中做过类似的事情。我手动回滚事务,为此我插入了try-catch块并手动回滚catch块中的事务。现在我从method1调用method2,并将对象保存到method2()中的数据库中,但它不会将对象保存到数据库中。 我只是想知道什么是可能的解决方案,保存对象在方法2()在方法1()的faliure。 提前感谢。

  • 我是WebServices的新手。Im通过标记为“Transacted”的camel路由向cxfendpoint发送webservice请求,并得到响应。在同一事务路由中,next语句抛出一个异常,以便我的异常处理程序回滚该事务。 我可以在我的事务回滚中找到其他东西,除了我的webservice请求响应,因为它已经提交了。

  • 我的路线如下 我知道(A)处的JMS消费者将在每次轮询时分叉JMS事务,并附加到线程。(B)中的事务处理节点也将在交换到达那里并连接到线程后分叉JPA事务。 请在下面找到我的问题: > < li >能否将两个不同的事务附加到一个线程上(如上所示)? < li >如果是,哪一个应该被停职? < li> 上述路由的提交和回滚顺序应该是什么? 注:我没有从骆驼在行动第二版中找到任何明显的答案,所以请指导