我有三個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作爲數據庫。請建議。
我有三個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作爲數據庫。請建議。
我面臨同樣的問題,我已經找到了唯一的解決辦法是使用抽象類,因爲我們不能讓一個外鍵動態,這裏是我使用的示例:
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;
}
Sorrry我對MySQL並不熟悉,但可能會出現這樣的一般性決定。在其他一些DBMS的我會通過創建解決這個問題:
類似的東西(僞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))
我想我失去了一些東西,所以你創建了對C兩個表? –
是的,你將不得不使用2個實體,一個屬於A,另一個屬於B –