两个实体与另一个实体有一对多的关系

时间:2016-05-23 07:44:54

标签: sql hibernate design-patterns

我有三个兴趣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作为数据库。请建议。

2 个答案:

答案 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中,我会通过创建:

来解决这个问题
  1. 表C中有两个可以使用NULL的FK(分别为表A和B的FK&#39)
  2. 表格约束检查两个FK都未被清零或填充 同时。
  3. 类似的东西(伪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))