我要解决一些麻烦。我在春季对网站的后端进行编码,并且正在使用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
而且我不想在table标记中有冗余。
有什么可以帮助我的吗?
这是我的两个类的代码:
@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);
}
}
谢谢您的帮助。
最佳答案
可能您是在重新创建相同的标签。检查数据库中是否存在具有该名称的标签,如果是,则从“标签”表中加载它。