Class User{
private String employeeId;
private Country assignedCountry;
private Region employeeRegion;
//getter & setter
}
Class Country{
private String countryCode;
private Region countryRegion;
//getter & setter methods
}
Class Region{
private String regionCode;
}
<resultMap type="User" id="userResultMap">
<id column="employee_id" property="employeeId" />
<association property="assignedCountry" resultMap="countryResultMap"/>
<association property="employeeRegion" resultMap="regionResultMap"/>
</resultMap>
<resultMap type="Country" id="countryResultMap">
<id column="country_cd" property="countryCode" />
<association property="countryRegion" resultMap="regionResultMap"/>
</resultMap>
<resultMap type="Region" id="regionResultMap">
<id column="region_cd" property="regionCode" />
<id column="region_nm" property="regionName" />
</resultMap>
员工被分配到一个国家,也属于一个地区。 国家/地区属于一个地区,该地区可能与员工所在地区相同,也可能不同。
查询将获取用户指定的国家和地区。
select U.*, C.*, R.* from
User U left outer join Country C
on U.assigned_country_cd = C.country_cd
left outer join Region R
on U.employee_region_cd = R.region_cd
当我通过 mybatis 执行查询并检查用户对象时,我可以看到用户区域设置正确。 但我还可以看到用户所在国家/地区内的 Region 对象也设置为用户所在的区域。事实不应该是这样的。 (据我了解,我这里没有获取国家地区。但如果是这样,则根本不应该设置此对象,而不是将员工地区设置为国家地区)
有人可以帮助我如何在国家对象内映射国家/地区的区域吗?
我对 mybatis 和 ORM 非常陌生。任何有助于阐明这一点的帮助将不胜感激。
最佳答案
在您的查询中,您将连接 Region
表,而不是连接 Country
表,而是连接 User
表,最终返回区域员工的(以及 Country
对象的 countryRegion
属性)。
在您的 ResultMap
中,regionResultMap
映射如下:
region_cd -> regionCode
region_nm -> regionName
您正在将 region_cd
列映射到 user.assignedCountry.countryRegion.regionCode
和 user.employeeRegion.regionCode
同时基本上将不同对象中相同的列设置为相同的属性。
你可以做的是在 SQL 中区分用户的区域和国家的区域,并相应地映射到 MyBatis 中:
添加另一个连接以连接区域与国家/地区:
select U.*, C.*, R.*, CR.region_cd AS C_region_cd, CR.region_nm as C_region_nm from
User U left outer join Country C
on U.assigned_country_cd = C.country_cd
left outer join Region R
on U.employee_region_cd = R.region_cd
left outer join Region CR
on CR.belongsTo = C.country_cd
并且,您需要按如下方式更改 ResultMap
,以便使用具有不同列名称的相同 ResultMap
。这里,belongsTo
是 Region
表中的列,显示它属于哪个Country
:
<resultMap type="User" id="userResultMap">
<id column="employee_id" property="employeeId" />
<association property="assignedCountry" resultMap="countryResultMap"/>
<association property="employeeRegion" resultMap="regionResultMap"/>
</resultMap>
<resultMap type="Country" id="countryResultMap">
<id column="country_cd" property="countryCode" />
<association columnPrefix="C_" property="countryRegion" resultMap="regionResultMap"/>
</resultMap>
<resultMap type="Region" id="regionResultMap">
<id column="region_cd" property="regionCode" />
<id column="region_nm" property="regionName" />
</resultMap>
关于mybatis - mybatis获取多个嵌入对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27302718/