我在MyBatis中遇到了一個有趣的問題,它在嘗試映射兩個相同類型的對象集合時導致遞歸。MyBatis:映射多個關聯/同一類型的集合時的遞歸
介紹。
這裏是我的DB模式: simple_db_schema
我有一個簡單的類用戶:
public class User {
private Long id;
private String login;
private String password;
private Employee employee;
// Constructors, setters and getters go here...
}
然後,我有類員工:
public class Employee {
private Long id;
private String lastName;
private User user;
// Constructors, setters and getters go here...
}
而且項目:
public class Project {
private Long id;
private String name;
private List<Employee> observers;
private List<Employee> executors;
// Constructors, setters and getters go here...
}
映射
在這裏,我展示了這個模式我的映射。
UserMapping
<resultMap type="User" id="userMap">
<id property="id" column="user_id"/>
<result property="name" column="user_login" />
<result property="password" column="user_password" />
<association property="employee" javaType="org.project.entity.Employee" resultMap="Employee.employeeMap"/>
</resultMap>
EmployeeMapping
<resultMap id="employeeMap" type="Employee">
<id property="id" column="emp_id" />
<result property="lastName" column="emp_last_name" />
<association property="user" javaType="org.project.entity.User" resultMap="User.userMap"/>
</resultMap>
ProjectMapping
<resultMap type="Project" id="projectMap">
<id property="id" column="project_id" />
<result property="name" column="project_name" />
<collection property="managers" columnPrefix="obsrv" ofType="Employee"
javaType="java.util.ArrayList" resultMap="employeeMap" />
<collection property="executors" columnPrefix="exec" ofType="Employee"
javaType="java.util.ArrayList" resultMap="employeeMap" />
</resultMap>
注ŧ帽子我在ProjectMapping中使用「columnPrefix」。一個是觀察員,另一個是執行者。這些集合使用相同的「resultMap」 - 「employeeMap」。
問題。
使用這種方法我的映射不起作用。 映射沒有問題用戶在僱員反之亦然 - 工作正常。
對數據庫的查詢是正確的。
我已經嘗試了不同的方式來排序了這一點(我把所有的映射在一個文件,我在UserMapping去除員工協會)但仍然沒有任何幫助。
我找到了一個解決方案,但這不是我正在尋找的。
一種方式是複製UserMapping和EmployeeMapping並改變其ID,以及使用比它這樣:
<resultMap type="Project" id="projectMap">
<id property="id" column="project_id" />
<result property="name" column="project_name" />
<collection property="managers" columnPrefix="obsrv" ofType="Employee"
javaType="java.util.ArrayList" resultMap="employeeMap" />
<collection property="executors" columnPrefix="exec" ofType="Employee"
javaType="java.util.ArrayList" resultMap="employeeMap1" />
</resultMap>
這意味着我有2份UserMapping和EmployeeMapping用以下ID:userMap,userMap1 and employeeMap,employeeMap1。
問題
請,可能有人解釋我這種情況呢?爲什麼我必須重複映射?或者,可能,我錯過了一些設置。
我不想重複我的映射,因爲我想重複使用它們。
有沒有一個解決方案沒有重複這些映射?
我有同樣的問題。兩個關聯使用相同的resultMap定義。這似乎不可能。 – Emerald214