2017-10-11 22 views
-1

我是新的Hibernate和有关于设置我的数据库的问题。设置与休眠和3个实体表

我有3个实体:Project,R1和R2。 一个项目可以有一对多的R1和R1可以属于多个项目。 R2属于一对Project-R1。 R2可以属于Project-R1的多对。

例子:

我的想法是第一对夫妇的项目,以R1,让项目记得R1的有哪些。因此,第三个表与Project和R1的主键连接。

当我必须将R2耦合到Project-R1情侣时,我想使用Project-R1和R2的主键使用另一个连接表。但是我怎样才能使用Hibernate进行最后一次连接,而无需在Project-R1-R2旁边创建一个自己的主键的连接表。

它甚至有可能吗?

回答

1

Hibernate docs举这个例子三元协会:

@Entity 
public class Company { 
@Id 
int id; 
... 
@OneToMany // unidirectional 
@MapKeyJoinColumn(name="employee_id") 
Map<Employee, Contract> contracts; 
} 

// or 

<map name="contracts"> 
<key column="employer_id" not-null="true"/> 
<map-key-many-to-many column="employee_id" class="Employee"/> 
<one-to-many class="Contract"/> 
</map> 

该文档还注意到,R 2 - (P + R1)类型的关联将典型地被代替建模为一个单独的实体类。这也是我的做法。

+0

感谢您的回答。如果我正确地理解了,是不是更好地制作一个包含P,R1和R2的id作为外键的独立表?我的问题是,P和R1必须立即耦合,但R2可能会在稍后时间。将P和R1保存在连接表中并在我们想将R2添加到P + R1时创建另一个表是否是一个好主意?有一个额外的表 – Urban

+0

我不认为以后添加的R2是(关联或实体类)方法的问题。您应该考虑只有在您的应用程序逻辑中创建链接时才创建实体 - >当您实际添加R2信息时,只应将行插入到连接表中。 – jaacco