Удалить родительскую строку, не затрагивая дочерние строки в спящем режиме - PullRequest
0 голосов
/ 21 июня 2019

У меня проблема с моим кодом в отношениях спящего режима @Manytomany.

Я вижу выше, проблема связана с "CascadeType.ALL" на стороне отношений @ManyToMany. Но если я удаляю этот CascadeType.ALL в @ManyToMany. Если я изменю этот CascadeType.ALL в @ManyToMany с помощью CascadeType.PERSIST и CascadeType.MERGE, я решу проблему. Но когда я добавляю новый объект получит ошибку. в противном случае, если я изменю его на CascadeType.ALL, при добавлении новых объектов он работает нормально, но это не решает проблему, которую я обсуждаю. Так как же сохранить строки в теге класса при удалении строк в Post.

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, я не смогу сохранить строку в Tag, когда удаляю строку в Post. когда я пишу это CascadeType.PERSIST и CascadeType.MERGE я получаю ошибку: объект ссылается на несохраненный временный экземпляр - сохраните временный экземпляр перед сбросом.

А это мой входной объект API:

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

Помните, что ввод API хорошо работает, когда я использую Casecade.ALL

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...