我试图为2个实体(新闻和标签)建立多对多的双向关系。
但是当我尝试saveOrUpdate新闻(已设置)时,不知怎的,它总是保存一组新的Tag甚至id已经填充在Tag中
我的注释有问题吗?
News.java
@Id
@GeneratedValue(generator = "increment")
@GenericGenerator(name = "increment", strategy = "increment")
@Column(name = "NEWS_ID")
public Long getId() {
return id;
}
@ManyToMany(fetch = FetchType.LAZY, cascade = {CascadeType.PERSIST, CascadeType.MERGE})
@Cascade( org.hibernate.annotations.CascadeType.SAVE_UPDATE )
@JoinTable(name = "NEWS_TAGS", joinColumns = @JoinColumn(name = "NEWS_ID"), inverseJoinColumns = @JoinColumn(name = "TAG_ID"))
public Set<Tag> getTags() {
return tags;
}
Tag.java
@Id
@GeneratedValue(generator = "increment")
@GenericGenerator(name = "increment", strategy = "increment")
@Column(name = "TAG_ID")
public Long getId() {
return id;
}
private Collection<News> news;
@JsonIgnore
@ManyToMany(cascade = { CascadeType.PERSIST, CascadeType.MERGE }, mappedBy = "tags")
public Collection<News> getNews() {
return news;
}
NewsDAO
public void save(News news){
this.hibernateSessionFactory.getCurrentSession().saveOrUpdate(news);
}
我想要做的是,当我保存“新闻”时,如果Tag存在,相关的Set将被忽略,如果Tag不存在则会插入新的,这可能吗?
请告知
答案 0 :(得分:2)
问题是您的对象(标签)未连接&#34;。我的意思是,hibernate不知道你的对象,当你试图保存新闻时,hibernate会将你的标签视为新对象。尝试在保存或更新之前从db获取Tag对象并使用此对象。