我有下一个 resultMap
<resultMap id="resultMap" type="***.PreMigrationData"
autoMapping="true">
...
<association property="tmpCase" javaType="***.TmpCase" columnPrefix="i_">
<id column="sid" property="sid"/>
<result column="pid" property="pid"/>
<collection property="routes" ofType="***.Route"
resultMap="routes" columnPrefix="rt_"/>
</association>
</resultMap>
<resultMap id="routes" type="***.Route">
<result column="sid" property="sid"/>
<result column="pid" property="pid"/>
...
</resultMap>
实体类。
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
public class PreMigrationData{
...
private TmpCase tmpCase;
}
@Getter
@Setter
@ToString
@AllArgsConstructor
@NoArgsConstructor
public class TmpCase {
private Long sid;
private Long pid;
...
private List<Route> routes;
}
@Getter
@Setter
@ToString
@NoArgsConstructor
@AllArgsConstructor
public class Route {
private Long sid;
private Long pid;
}
SQL:
<select id="getCases" resultMap="resultMap">
<include refid="select"/>
WHERE ...
</select>
<sql id="select">
select
<include refid="case">
<property name="alias" value="pi"/>
<property name="prefix_source" value="i_"/>
</include>,
<include refid="rotue">
<property name="alias" value="pir"/>
<property name="prefix_source" value="i_rt_"/>
</include>
from tmp_case pi
LEFT JOIN route pir on pir.PID = pi.SID
在 db 层,路由具有 TmpCase 的外键:route.pid -> tmpCase.sid。
- 已经尝试过:在没有包装 MigrationData 的情况下使其相同并且它按预期工作,但我严格需要这种结构并使用 columnPrefix。
- 问题:我得到错误的映射,即 insted 获取 TmpCase 列表,其中包含路由列表,我得到的 TmpCase 列表只有一个路由元素。
- 预期:TmpCase.getRoutes() 是多个元素的列表
- 实际: TmpCase.getRoutes() 是一个或零个元素的列表。
我认为这可能是我误解了关联块内的工作收集块与 columnPrefix 的关系。我正在阅读文档,但没有。我会很高兴得到任何帮助。