gpt4 book ai didi

java - JPA ManyToMany - 始终在表中创建新值,即使该值存在

转载 作者:行者123 更新时间:2023-11-29 09:48:00 24 4
gpt4 key购买 nike

我遇到了一些麻烦。我正在 Spring 编写网站的后端,并使用 Rest API。我创建了两个关系为“ManyToMany”的类。第一类是“StateOfArt”,第二类是“Tag”。当我启动服务器时,我在 Json 中发布了 2 个 StateOfArt (我正在使用 Insomnia)并且它运行得很好。我的意思是这两个 StateOfArt 在我的数据库中。问题在于,即使两个 StateOfArt 具有相同的标签,标签也会重复。

这是一个例子:我正在 Json 中发布两个 StateOfArt,这是一个数据库:

My table StateOfArt

My table Tag

My Join table

我想将其添加到我的连接表中:

1 1

1 2

2 1

2 2

我希望表标记中没有冗余。

可以帮助我吗?

这是我的两个类的代码:

@Entity(name = "StateOfArt")
public class StateOfArt {

@Id
@GeneratedValue(strategy= GenerationType.IDENTITY)
private Integer id;
private String author;
private String title;
private String date;
private ArrayList<String> co_author;
private String theabstract;

//@ManyToMany(fetch = FetchType.LAZY ,cascade = {CascadeType.ALL})
@ManyToMany(fetch = FetchType.LAZY, cascade = {
CascadeType.ALL
})
@JoinTable(name = "state_of_art_tag",
joinColumns = @JoinColumn(name = "stateofart_id"),//, referencedColumnName = "id"),
inverseJoinColumns = @JoinColumn(name = "tag_id"))//, referencedColumnName = "id"))
//@JsonIgnore
private Set<Tag> tags = new HashSet<>();

public StateOfArt(){}

public StateOfArt(Integer id, String author, String title, String date,ArrayList<String> co_author,String theabstract, HashSet<Tag> tags){
super();
this.id = id;
this.title = title;
this.author =author;
this.date =date;
this.co_author = co_author;
this.theabstract = theabstract;
//this.articles = articles;
this.tags = tags;

}



//Getters and Setters are here
}

@Entity(name = "Tag")
@Table(name = "tag_for_stateofart")
public class Tag {

@Id
@GeneratedValue(strategy= GenerationType.IDENTITY)
Integer id;

@Column(length = 50)
private String name;


@ManyToMany(mappedBy = "tags")
private Set<StateOfArt> stateofarts = new HashSet<>();

public Tag() {}

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

public String getTag() {
return this.name;
}

@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Tag tag = (Tag) o;
return Objects.equals(name, tag.name);
}
}

感谢您的帮助。

最佳答案

您可能正在再次创建相同的标签。检查数据库中是否存在该名称的标签,如果存在,则从标签表中加载。

关于java - JPA ManyToMany - 始终在表中创建新值,即使该值存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55317147/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com