我在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