我在@Manytomany 休眠关系中的代码有问题。
我看到上述问题是由于@ManyToMany 关系方面的“CascadeType.ALL”。但是如果我在@ManyToMany 中删除这个 CascadeType.ALL。如果我用 CascadeType.PERSIST 和 CascadeType.MERGE 更改 @ManyToMany 中的 CascadeType.ALL,我可以解决问题。但是当我添加新对象时会出错。否则,如果我将其更改为 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,当我在 Post 中删除一行时,我将无法在 Tag 中保留该行,当我写它是 CascadeType.PERSIST 和 CascadeType.MERGE 我得到一个错误:对象引用了一个未保存的瞬态instance - 在刷新之前保存瞬态实例。
这是我的输入 API 对象:
{
"title": "System",
"tags": [
{
"nameTag": "apt"
},
{
"nameTag":"Worm"
}
]
}
请记住,当我使用 Casecade.ALL 时,api 输入工作正常