我有两个实体:项目,员工许多一对多的单向映射,并且只使用两个表
- 员工都有主键{雇员} +其他一些属性
- 项目有主键{专案编号}
代码:
public class Employee {
Long employeeId;
String name;
}
public class Project {
Long projectId;
Collection<Employee> employees;
}
员工和项目是一个单向许多一对多的关系。一般的方法是有三个表:Employee,Project,EmployeesAssignedToProjects。
Employee
----------
employeeId (PK)
name
Project
----------
projectId (PK)
EmployeesAssignedToProjects
----------------------------
projectId (FK)
employeeId (FK)
{projectId,employeeId} (PK)
由于Project没有除id以外的其他属性,因此Project表并不是真的必要。这带来了这个多对多关系在Project本质上映射到EmployeesAssignedToProjects时应如何映射的问题。
请注意员工没有指向项目的指针。典型的mappedBy构造不能在这里使用。
[ - 更新 - ]
的问题是更复杂一点:两个项目和员工都组合键。
- 项目的关键是{companyId,专案编号}
- 员工的关键是{companyId,雇员}
我采用了3台成立。表PROJECT_EMPLOYEE有3列:companyId,employeeId,projectId。
<many-to-many name="PROJECT" >
<join-table name="PROJECT_EMPLOYEE">
<join-column name="companyId" referenced-column-name="companyId"/>
<join-column name="employeeId" referenced-column-name="employeeId" />
<inverse-join-column name="companyId" referenced-column-name="companyId" />
<inverse-join-column name="projectId" referenced-column-name="projectId" />
</join-table>
</many-to-many>
我收到一个错误说companyId出现多次: 重复列映射集合:Project.employees柱:我在XML映射companyId
感谢帕斯卡,请参阅[更新]。 – 2010-08-28 04:01:11
@康迪不客气。但是,请将*新*问题作为新问题发布。将它链接到这一个,如果你想,但你的更新是一个不同的问题和问题,即使相关。请不要在单个问题中混合问题。我不会在这里回答。 – 2010-08-28 04:06:03
是否有可能将@JoinColumn(name =“EMPLOYEE_EMPLOYEEID”.. ..映射到employe表上的另一个唯一键?我无法做到这一点。我想要一个字符串唯一约束来显示而不是整数 – momomo 2015-08-08 09:40:15