我要渡过一些麻烦。我在春季对网站的后端进行编码,并且正在使用Rest API。 我创建了两个类,它们之间的关系为“ ManyToMany”。 第一类是“ StateOfArt”,第二类是“ Tag”。 当我启动服务器时,我在Json中发布了2个StateOfArt(我正在使用Insomnia),并且运行良好。我的意思是这两个StateOfArt在我的数据库中。问题是即使两个StateOfArt具有相同的标签,标签也会重复。
这里是一个示例: 我在Json中发布了两个StateOfArt,这是数据库:
我想在我的联接表中使用它:
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);
}
}
谢谢您的帮助。
答案 0 :(得分:1)
可能您正在重新创建相同的标签。检查数据库中是否存在具有该名称的标签,如果是,则从“标签”表中加载它。
答案 1 :(得分:0)
您的数据库中的标签表一定有问题。 创建表时,应在标签表中指定列名以具有唯一值。