2016-05-23 94 views
0

我有三個enttites A,B和C的關係如下一對多關係:兩個實體具有一個與另一個實體

A is One To many with C 
B is One to many with C 

如果我只有上述之一,我使用保持C中A/B的「id」作爲外鍵。但在這種情況下,我沒有得到如何去做。

C中的條目或屬於A或B,不屬於兩者。

我使用Hibernate作爲ORM和MySQL作爲數據庫。請建議。

回答

0

我面臨同樣的問題,我已經找到了唯一的解決辦法是使用抽象類,因爲我們不能讓一個外鍵動態,這裏是我使用的示例:

public abstract class AbstractC{ 
private int id; 
} 

@Entity... 
public class CbelongsToA extends AbstractC{ 
@ManyToOne... 
private A a; 
} 

@Entity... 
public class CbelongsToB extends AbstractC{ 
@ManyToOne... 
private B b; 
} 

public class A{ 
@OneToMany 
private List<CbelongsToA> cbelongToA; 
} 

public class B{ 
@OneToMany 
private List<CbelongsToB> cbelongToB; 
} 
+0

我想我失去了一些東西,所以你創建了對C兩個表? –

+0

是的,你將不得不使用2個實體,一個屬於A,另一個屬於B –

0

Sorrry我對MySQL並不熟悉,但可能會出現這樣的一般性決定。在其他一些DBMS的我會通過創建解決這個問題:

  1. 兩個空,能夠FK的表C(FK的表A和B分別)
  2. 表的約束檢查,這兩個FK的不歸零或填充在 同時。

類似的東西(僞SQL,只是爲了舉例說明):

CREATE TABLE C (
C_DATA varchar(255), 
A_ID int NULL, 
B_ID int NULL, 
FOREIGN KEY (A_ID) REFERENCES A(ID), 
FOREIGN KEY (B_ID) REFERENCES B(ID), 
CONSTRAINT chk_c_fks CHECK (A_ID IS NOT NULL XOR B_ID IS NOT NULL)) 
相關問題