我在將列添加到現有連接表時遇到了一些問題。以下是我希望我的連接表看起來如何,但我在實際實現中缺少連接表中的tenant_id
列。將列添加到Join表?
下面是我對我的JPA實現代碼:
@Entity
@Table(name = "label")
public class Label {
@Column(name = "tenant_id")
private String tenant_id;
@Column(name = "label_id")
private String label_id;
@JsonIgnore
@ManyToMany(targetEntity = Report.class, cascade = { CascadeType.PERSIST, CascadeType.MERGE })
@JoinTable(name = "tagging", joinColumns = @JoinColumn(name = "label_id"), inverseJoinColumns = @JoinColumn(name = "report_id"))
private Set<Report> reports;
}
@Entity
@Table(name = "report")
public class Report {
@Column(name = "tenant_id")
private String tenant_id;
@Column(name = "report_id")
private String report_id;
@column(name = "created_by")
private String created_by;
@JsonIgnore
@ManyToMany(targetEntity = Label.class, cascade = { CascadeType.PERSIST, CascadeType.MERGE })
@JoinTable(name = "tagging", joinColumns = @JoinColumn(name = "report_id"), inverseJoinColumns = @JoinColumn(name = "label_id"))
private Set<Label> labels;
}
和代碼基本上放Report
類和Label
類的id
到標籤表到位report_id
和label_id
的列。我遇到的問題是我想將tenant_id
列添加到我的tagging
表中的每個現有條目。我試圖
ALTER TABLE tagging ADD COLUMN tenant_id varchar(255) NOT NULL;
,但因爲我有預先存在的數據,我得到一個錯誤說,tenant_id
必須有一個默認值。我想以某種方式更新每個tagging
表與以下內容:
select tenant_id from report where report.id = tagging.report_id
,並執行此更新時,我的數據庫中的值被填充/創建。有沒有辦法做到這一點?任何幫助,將不勝感激。謝謝!
我對你的模式和你的問題略有困惑,但請注意,如果你想記錄關於關係的額外信息,那麼你需要通過創建一個指向「標記」的附加實體來替換'@ManyToMany'併爲此新實體標記'@OneToMany'關係。看到這裏:http://stackoverflow.com/questions/5127129/mapping-many-to-many-association-table-with-extra-columns –
@AlanHay謝謝你讓我知道。你是說在我想插入任何新行的標記中,我必須創建一個名爲'tagging'的實體,並使用'report_id','label_id'和'tenant_id'創建'@ OneToMany'關係? – user1871869