1
我想爲2個實體(新聞和標籤)建立多對多的雙向關係。休眠/ JPA雙向級聯saveOrUpdate
但是,當我嘗試saveOrUpdate新聞(已設置),不知何故,總是將一組新的標籤ID,甚至在標籤
是不是有毛病我的註釋已填充?
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存在,將被忽略,並且如果Tag不是,將會插入新的,這可能嗎?
請告知
您的標記對象是否已連接(它們是否連接了休眠對象)? – 2012-07-19 19:13:57
我只能從Web層獲取字符串,因此在對新聞執行saveOrUpdate之前,我必須重新創建集(從數據庫獲取標識並將其設置回標記)。有沒有辦法讓hibernate知道這些標籤。 – 2012-07-19 19:18:32
嘗試從數據庫獲取對象(標記),而不僅僅是id。如果你使用已經連接的對象,它應該可以工作 – 2012-07-20 16:08:11