Java 使用hibernate和3个实体设置表

Java 使用hibernate和3个实体设置表,java,mysql,hibernate,Java,Mysql,Hibernate,我是Hibernate新手,对设置数据库有疑问 我有3个实体:项目、R1和R2。 一个项目可以有一对多R1,R1可以属于多个项目。 R2属于一对项目R1。R2可以属于多对Project-R1 示例: 我的想法是首先将项目耦合到R1,让项目记住它有哪些R1。因此,第三个表用于连接Project和R1的主键 当我必须将R2耦合到Project-R1耦合时,我正在考虑使用另一个具有Project-R1和R2主键的联接表。但是,如何使用Hibernate创建最后一个连接,而不创建在Project-R1-

我是Hibernate新手,对设置数据库有疑问

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

示例:

我的想法是首先将项目耦合到R1,让项目记住它有哪些R1。因此,第三个表用于连接Project和R1的主键

当我必须将R2耦合到Project-R1耦合时,我正在考虑使用另一个具有Project-R1和R2主键的联接表。但是,如何使用Hibernate创建最后一个连接,而不创建在Project-R1-R2旁边有自己主键的联接表呢

甚至可能吗?

给三元关联举个例子:

@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>
@实体
公营公司{
@身份证
int-id;
...
@单向的
@MapKeyJoinColumn(name=“employee\u id”)
地图合同;
}
//或

文档还指出,R2-(p+R1)类型的关联通常会建模为一个单独的实体类。这也是我的方法。

谢谢你的回答。如果我理解正确,那么创建一个包含P、R1和R2的id作为外键的单独表是否更好?我的问题是,P和R1必须立即耦合,但是R2可以稍后耦合。当我们要将R2添加到P+R1时,将P和R1保存在联接表中并创建另一个表是一个好主意吗?有一个额外的表我不认为以后添加R2在任何(关联或实体类)方法中都是一个问题。您应该考虑到实体只有在应用程序逻辑中创建链接时才创建。>当您实际添加R2信息时,应该只将行插入到联接表中。