2016-05-23 96 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)) 
相关问题