Это возможно, но для сопоставления результатов в один List
необходимо объединить результаты в один набор результатов и использовать <discriminator />
.
Предположим две таблицы фильтров, например:
create table filter_a (
testcase_id int,
foo varchar(20)
);
create table filter_b (
testcase_id int,
bar int
);
Картограф будет выглядеть следующим образом.
<resultMap type="TestCase" id="testCaseRM">
<id column="testcase_id" />
<collection property="filters" resultMap="filterRM" />
</resultMap>
<resultMap type="java.lang.Object" id="filterRM">
<id column="filter_name" />
<discriminator javaType="string" column="filter_name">
<case value="a" resultType="FilterA">
<result column="foo" property="foo" />
</case>
<case value="b" resultType="FilterB">
<result column="bar" property="bar" />
</case>
</discriminator>
</resultMap>
<select id="selectAll" resultMap="testCaseRM">
select testcase_id, 'a' filter_name, foo, null bar from filter_a
union all
select testcase_id, 'b' filter_name, null foo, bar from filter_b
</select>
Обратите внимание, что я добавил filter_name
к запросу, чтобы определить тип фильтра для каждой строки.
При таком подходе запрос может запутаться из-за UNION
.
Возможно, было бы лучше выполнить 10 отдельных SELECT и создать TestCase
s вручную в методе по умолчанию или на уровне обслуживания.