我有兩個實體:項目,員工許多一對多的單向映射,並且只使用兩個表
- 員工都有主鍵{僱員} +其他一些屬性
- 項目有主鍵{專案編號}
代碼:
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