У меня проблема с моим кодом в отношениях спящего режима @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