javax.persistence.rollbackexception:提交事务时出错]根本原因为java.lang.stackOverflower错误:null

63lcw9qa  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(423)

我有一个使用springdatarest框架的springbootapi(从springbootstarter父版本2.1.0.release继承的依赖项)。我正在尝试执行put或修补程序请求以更新实体,但两者似乎都不起作用,并抛出以下错误消息:
[请求处理失败;嵌套异常为org.springframework.transaction.transactionsystemexception:无法提交jpa事务;嵌套异常为javax.persistence.rollbackexception:提交事务时出错]根本原因为java.lang.stackOverflower错误:null
我尝试更新的实体具有以下结构:

@Getter
@Setter
@Entity
@Table(name = "entity_a")
public class EntityA extends BaseEntity {
    @Column(name = "name", nullable = false, length = 100)
    private String name

    @OneToMany(mappedBy = "entityA")
    private Set<EntityB> entitiesB;
}

其中baseentity具有id和审核信息。
我正在向以下路径发出put/patch请求:
http://localhost:8080/api/v1/entitiesa/the\u uuid
车身有效载荷为
{“名称”:“新名称”}
由于这是一个堆栈溢出错误,我的第一个想法是递归正在发生。我注解掉了set字段(以及@onetomany注解),但仍然遇到了错误。以前有人经历过这个错误吗?

vwoqyblh

vwoqyblh1#

问题在于我实现auditoraware接口的方式。我使用的userdao方法导致了一个递归调用。我仍然不知道为什么会这样,但是看看这个论坛,我将getcurrentauditor()的实现从:

@Override
public Optional<User> getCurrentAuditor() {
    String username = SecurityContextHolder.getContext().getAuthentication().getName();
    User user = userDao.findByUsername(username);
    return Optional.ofNullable(user);
}

收件人:

@Override
public Optional<User> getCurrentAuditor() {
    User auditor = null;
    Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
    if (authentication != null) {
        Object principal = authentication.getPrincipal();
        if (principal instanceof User) {
            auditor = (User) principal;
        }
    }
    return Optional.ofNullable(auditor);
}

一切正常。

相关问题