我有三个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 –