我想將關鍵字與我的數據庫中的主體相關聯,並讓它們通過連接表進行鏈接。大部分時間我都不會知道一個關鍵字是否已經在表中,所以如果是這樣,我想讓它忽略,而是將關聯保存到連接表中。我想知道是否可以使用註釋執行這樣的任務。如何將實體保存到一個表和它的連接表中,而不需要將實體作爲它們各自表中的重複項
例如:
我已經subject
類聲明爲這樣:
@Entity
public class Subject{
@Id
private Long Id;
private String subject;
@ManyToMany
@JoinTable
private List<Keyword> keywords
public Subject(){
this.keywords = new ArrayList<>();
}
//getters and setters
}
和keyword
分別宣佈
@Entity
public class Keyword{
@Id
private Long Id;
private String keyword;
@ManyToOne(mappedBy="keywords")
@JoinTable
private Set<Subject> subject;
//getters and setters
}
我一會兒現在麻煩的是:當我嘗試關聯這些關鍵字到另一個主題我在關鍵字表中獲得一個插入.Same適用於我在下面用示例代碼描述的連接表:
例如:
Subject s = new Subject()
s.setSubject("mechanics");
List<Keyword> ks = new ArrayList<>();
k.add(new Keyword("inertia");
k.add(new Keyword("momentum");
//start em
em.persist(s);
for(Keyword k : ks){
k.setSubject(s);
em.persist(k);
}
//close em
上面的代碼結束後,我得到的表,看起來像這樣
KEYWORD KEYWORD_SUBJECT SUBJECT
id keyword keywordid subjectid id subject
1 inertia 1 1 1 mechanics
2 momentum 2 1
如果我相同的關鍵字相關聯的另一個主題,做一個合併我得到的表重複如下所示的值。
代碼示例:
Subject s = new Subject()
s.setSubject("engineering");
List<Keyword> ks = new ArrayList<>();
k.add(new Keyword("inertia");
k.add(new Keyword("momentum");
//start em
em.persist(s);
for(Keyword k : ks){
k.setSubject(s);
em.merge(k);
}
//close em
上面的代碼結束後,我得到的表看起來像這樣
KEYWORD KEYWORD_SUBJECT SUBJECT
id keyword keywordid subjectid id subject
1 inertia 1 1 1 mechanics
2 momentum 2 1 2 engineering
3 inertia 3 2
4 momentum 4 2
摘要 什麼,我想要做的
- 保存邏輯流關鍵字和副主題。
- 如果關鍵字在表更新連接表中。
- 如果沒有保存關鍵字並更新連接表。
含修正修訂這裏
爲什麼不張貼您使用的持久對象的代碼?顯示對象的創建,以及它們處於什麼生命週期狀態,以及事務開始/提交 –
@BillyFrost問題updated.will會很高興如果你能幫忙 – Kaizen