我有三个兴趣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 :(得分: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;
}
答案 1 :(得分:0)
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))