javax.persistence.RollbackExceptionが:エラーjava.lang.StackOverflowErrorを原因ルートで]トランザクションのコミット中:ヌル

マシューSatti:

私は春のデータRESTフレームワーク(春・ブート・スターター・親2.1.0.RELEASEから継承された依存関係)を使用して、春のブートAPIを持っています。私は、次のエラーメッセージを投げ、エンティティを更新するために、PUTまたはPATCHリクエストを実行しようとし、どちらも動作するようですよ。

[リクエストの処理に失敗しました。ネストされた例外はorg.springframework.transaction.TransactionSystemExceptionです:JPAトランザクションをコミットできませんでした。ネストされた例外はjavax.persistence.RollbackExceptionがあります。エラーの根本原因によってjava.lang.StackOverflowErrorとの取引]をコミット中:ヌル

私は更新しようとしているエンティティは、以下の構造を有します:

@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_uuid

ボディペイロードとして持ちます

{「名」:「新しい名前」}

それは、スタックオーバーフローエラーだったので、私の最初に考えたのは、何かの再帰が起きていました。私は(@OneToMany注釈と一緒に)設定<EntityB>フィールドをコメントアウトし、私はまだエラーが発生しました。誰もが前にこのエラーを経験していますか?

マシューSatti:

問題は、私はAuditorAware <T>インターフェイスを実装方法で行うことでした。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);
}

予想通り、すべてが動作します。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=190880&siteId=1