0

@Manytomany 休止状態関係のコードに問題があります。

上記の問題は、@ManyToMany 関係側の「CascadeType.ALL」によるものです。しかし、@ManyToMany でこの CascadeType.ALL を削除すると。この CascadeType.ALL を @ManyToMany で CascadeType.PERSIST と CascadeType.MERGE に変更すると、問題が解決します。しかし、新しいオブジェクトを追加すると、エラーが発生します。それ以外の場合、CascadeType.ALL に変更すると、新しいオブジェクトを追加するときに問題なく動作しますが、議論している問題は解決しません。Post で行を削除するときに、どうすれば Class Tag に行を保持できますか。

public class Post {

    @Id
    @GeneratedValue
    private Long id;

    private String title;

    public Post() {}

    public Post(String title) {
        this.title = title;
    }

    @ManyToMany(cascade = {
        CascadeType.ALL
    },fetch = FetchType.EAGER)
    @JoinTable(name = "post_tag",
        joinColumns = @JoinColumn(name = "post_id"),
        inverseJoinColumns = @JoinColumn(name = "tag_id")
    )
    private List<Tag> tags = new ArrayList<>();
}

///

public class Tag {

    @Id
    @GeneratedValue
    private Long id;

    @NaturalId
    private String nameTag;

    @ManyToMany(mappedBy = "tags",fetch = FetchType.LAZY)
    private List<Post> posts = new ArrayList<>();

    public Tag() {}

    public Tag(String nameTag) {
        this.nameTag = nameTag;
    }
}

上で述べたように、CascadeType.ALL の場合、CascadeType.PERSIST および CascadeType.MERGE と書いたときに Post の行を削除すると、Tag の行を保持できません。インスタンス - フラッシュする前に一時的なインスタンスを保存します。

これが私の入力 API オブジェクトです。

{
    "title": "System",
    "tags": [
        {
            "nameTag": "apt"
        },
        {
            "nameTag":"Worm"
        }
    ]
}

Casecade.ALL を使用すると、API 入力が正常に機能することを思い出してください。

4

0 に答える 0