我面臨一個關(guān)于如何管理特定模型的映射的問題。這是一個多租戶應(yīng)用程序,我們已經(jīng)選擇在每個實體中包含“tenant_id”,因此我們不必每次需要獲取實體時都進(jìn)行聯(lián)合(實際上,這是我的問題的根源...)。模型如下:+--------------------+ +---------------+| Book | | Author |+--------------------+ +---------------+| id (pk) | | id (pk) || tenant_id (pk)(fk) | | tenant_id (pk || author_id (fk) | | name || title | +---------------++--------------------+如您所見,tenant-id 在每個實體中,并且是主鍵的一部分。我們使用@IdClass 來管理復(fù)合鍵。這是代碼: @Data public class TenantAwareKey implements Serializable { private UUID id; private Integer tenantId; } @IdClass(TenantAwareKey.class) @Entity @Table(name = "BOOK") @Data public class Book { @Id @GeneratedValue @Column(name = "ID") private UUID id; @Id @Column(name = "TENANT_ID") private Integer tenantId; private String title; @ManyToOne @JoinColumns( value = { @JoinColumn(referencedColumnName = "id", name = "author_id"), @JoinColumn(referencedColumnName = "tenant_id", name = "tenant_id", insertable = false, updatable = false) }) private Author author; } @IdClass(TenantAwareKey.class) @Entity @Data public class Author { @Id @GeneratedValue @Column(name = TenantAwareConstant.ENTITY_ID_COLUMN_NAME) private UUID id; @Id @Column(name = TenantAwareConstant.TENANT_ID_COLUMN_NAME) private Integer tenantId; private String name; }如果我不嘗試“共同化”tenant_id 列,我設(shè)法使其工作,當(dāng)我只有一個具有此tenant_id 的外鍵時可以接受,但隨著外鍵數(shù)量的增加越來越少,導(dǎo)致添加每次都有一個tenant_id 列,重復(fù)信息和破壞記憶......經(jīng)過一番挖掘,我在 Hibernate 中發(fā)現(xiàn)了一個未解決的問題:https ://hibernate.atlassian.net/browse/HHH-6221多年來一直沒有修復(fù)...所以,我的問題是:您是否遇到過這樣的映射,當(dāng)我有一個與主鍵共享字段的外鍵時,是否有避免重復(fù)列的解決方案?
1 回答

子衿沉夜
TA貢獻(xiàn)1828條經(jīng)驗 獲得超3個贊
如此處所述,您可以通過對列 id_tenant 使用 @JoinColumnOrFormula 來繞過驗證。
您應(yīng)該像這樣映射作者的關(guān)聯(lián):
@JoinColumnsOrFormulas( value = { @JoinColumnOrFormula(column = @JoinColumn(referencedColumnName = "id", name = "author_id")), @JoinColumnOrFormula(formula = @JoinFormula(referencedColumnName = "tenant_id", value = "tenant_id")) })
添加回答
舉報
0/150
提交
取消