【发布时间】:2012-08-10 13:17:09
【问题描述】:
我有Employee 和Department 的下表结构。 Employee 的复合键有三列 - EMP_ID,DEPT_ID,DEPT_CODE
但是部门只有两列匹配 Employee 的复合键 - DEPT_ID,DEPT_CODE。
<class name="com.test.Employee" table="EMPLOYEE">
<composite-id>
<key-property column="EMP_ID" name="empId" type="java.lang.Integer"/>
<key-property column="DEPT_ID" name="deptID" type="java.lang.Integer"/>
<key-property column="DEPT_CODE" name="deptID" type="java.lang.Integer"/>
</composite-id>
<property column="EMP_NAME" name="empName" type="java.lang.String"/>
<list name="departments" table="DEPARTMENT" fetch="select">
<key>
<column name="DEPT_ID"></column>
<column name="DEPT_CODE"></column>
</key>
<index/>
<one-to-many class="com.test.Department" />
</list>
</class>
<class name="com.test.Department" table="DEPARTMENT">
<composite-id>
<key-property column="DEPT_ID" name="deptID" type="java.lang.Integer"/>
<key-property column="DEPT_CODE" name="deptID" type="java.lang.Integer"/>
</composite-id>
<property column="DEPT_NAME" name="deptName" type="java.lang.String"/>
</class>
现在我想在这两个表上加入一个连接,但是它给出了错误,说主键 EMP_ID 没有映射。如果我将EMP_ID 放在Employee 映射xml 中的“列出部门键列”下,应用程序会加载但在Department 表中没有匹配列。
那么有什么办法可以解决这个问题。如何在休眠映射文件中配置join/one-to-many mapping,当您有一个具有复合键的表和另一个主键是该复合键的子集的表时。
【问题讨论】:
-
这个连接看起来怎么样?
-
另一个问题:真的有必要拥有所有这些复合键吗? NH 作为 ORM 不太喜欢复合键。
标签: hibernate mapping one-to-many