Я пытаюсь получить данные, используя ассоциацию MyBatis. Полученные данные включают в себя список лиц, каждый из которых имеет список компаний, связанных с ними. (см. POJO) В настоящее время в БД всего два человека, скажем, P1 и P0. P1 связан с компанией C1 и C2, а P0 связан только с C1. (см. результат sql)
Моя карта результатов содержит карту для человека, которая сама содержит ассоциацию карты для компании. (см. карту результатов)
Когда я выбираю данные в sql, три строки идут в следующем порядке: (см. Sql result)
- P1 с C1
- P0 с C1
- P1 с C2
Когда я использую «заказ по лицу, компания», я получаю правильный объект, т. Е. Список людей, имеющих два значения: одно для P1 и другое для P0, причем P1 имеет список C1 и C2, а P0 имеет список только С1. (см. JSON # 1)
Однако, когда я не использую «упорядочить по», я получаю неправильный список объектов, имеющий два объекта P1 (имеющий список C1 и C2). Там нет объекта P0. (см. JSON # 2)
Я пытался использовать идентификатор (в качестве уникального идентификатора) для карты результатов компании и человека. Я также попробовал вложенное отображение.
Java сторона:
POJO:
public class Person {
private String personId;
private String firstName;
private String lastName;
private List<CompanyWiseDetails> companyWiseDetails;
// setters and getters
}
public class CompanyWiseDetails {
private String companyId;
private String companyName;
private String payrollCycle;
private Double januaryCatch;
// setters and getters
}
DAO:
final Map<Object, Object> paramMap = new HashMap<Object, Object>();
paramMap.put("universeEndDate", this.getUniverseEndDate());
paramMap.put("projectionDate", projectionDate);
SqlSession.selectList("fetchData")
Карта результатов:
<resultMap id="person" type="Person">
<id property="personId" column="person_id" />
<result property="firstName" column="first_name" />
<result property="lastName" column="last_name" />
<!-- few other fields which can be null -->
<collection
property="companyWiseDetailsList"
resultMap="companyEntityWiseDetails" />
</resultMap>
<resultMap id="companyEntityWiseDetails"
type="CompanyWiseDetails">
<id property="companyId" column="company_id" />
<result property="companyName" column="company_name" />
<result property="payrollCycle" column="payroll_cycle" />
<!-- few other fields which can be null -->
</resultMap>
SQL:
<select id="fetchData" resultMap="person" >
<include refid="toCreateTemporary_table"/>
select
table_one.person_id as person_id,
company_table.hr_company_code as company_id,
tCompany.PayrollCycle as payroll_cycle
from table_one table_one
join company_table_strategy company_table
on company_table.person_id = table_one.person_id
and company_table.as_on_date = #{projectionDate}
and company_table.tt_end= #{universeEndDate}
join tCompany
on company_table.hr_company_code = tCompany.HRCompanyCode
left join
#temporary_table
on #temporary_table.company_id = company_table.hr_company_code
and #temporary_table.person_id = table_one.person_id
where
table_one.as_on_date = #{projectionDate}
and table_one.tt_end= #{universeEndDate}
order by
person_id, entity_id
drop table #temporary_table
</select>
Вывод SQL
person_id company_id payroll_cycle company_name cash_compensation random_percentage income comp field1 bonus field2
P1 C1 bi_weekly C1_name 5000.00000000 50.00000000 200112.10000000 60.10000000 NULL NULL NULL
P0 C1 bi_weekly C1_name 5000.00000000 50.00000000 100112.10000000 30.10000000 NULL NULL NULL
P1 C2 bi_weekly C2_name 5000.00000000 50.00000000 200112.10000000 30.10000000 362906.82000000 25000.00000000 1000.00000000
Ответ JSON при использовании order by:
[
{
"personId": "P0",
"firstName": null,
"lastName": null,
"companyEntityWiseDetailsList": [
{
"companyId": "C1",
"companyName": null,
"payrollCycle": "bi_weekly"
}
]
},
{
"personId": "P1",
"firstName": null,
"lastName": null,
"companyEntityWiseDetailsList": [
{
"companyId": "C1",
"companyName": null,
"payrollCycle": "bi_weekly",
},
{
"companyId": "C2",
"companyName": null,
"payrollCycle": "bi_weekly",
}
]
}
]
Ответ JSON, когда order by не используется:
[
{
"personId": "P1",
"firstName": null,
"lastName": null,
"companyEntityWiseDetailsList": [
{
"companyId": "C1",
"companyName": null,
"payrollCycle": "bi_weekly",
},
{
"companyId": "C2",
"companyName": null,
"payrollCycle": "bi_weekly",
}
]
},
{
"personId": "P1",
"firstName": null,
"lastName": null,
"companyEntityWiseDetailsList": [
{
"companyId": "C1",
"companyName": null,
"payrollCycle": "bi_weekly",
},
{
"companyId": "C2",
"companyName": null,
"payrollCycle": "bi_weekly",
}
]
}
]
Должен ли "упорядочить" повлиять на результат