У меня есть вложенный запрос SQL для получения сведений о сотруднике с использованием их идентификатора.
Сейчас я использую BeanListHandler для получения данных как List<Details>
, но хочу сохранить их как Map<String, Details>
, где Идентификатор, который я первоначально передаю, должен быть ключом для легкого поиска, а не поиска в Списке с потоками каждый раз.
Я пытался преобразовать в Карты, но я не уверен, как сопоставить идентификатор как строку или как получить исходный идентификатор, переданный во внутренний запрос в виде столбца в конечном результате.
MainTest. java:
String candidateId = "('1111', '2222', '3333', '4444')";
String detailsQuery =
"select PARTNER, BIRTHDT, XSEXM, XSEXF from \"schema\".\"platform.view/table2\" where partner IN \r\n"
+ "(select SID from \"schema\".\"platform.view/table1\" where TYPE='BB' and CLASS='yy' and ID IN \r\n"
+ "(select SID from \"schema\".\"platform.view/table1\" where TYPE='AA' and CLASS='zz' and ID IN"
+ candidateId + "\r\n" + "))";
Map<String, Details> detailsView = queryRunner.query(conn, detailsQuery, new DetailsViewHandler());
Подробности. java:
public class Details {
private String candidateId;
private String birthDate;
private String maleSex;
private String femaleSex;
// getter and setter
}
DetailsViewHandler. java:
public class DetailsViewHandler extends BeanMapHandler<String, Details> {
public DetailsViewHandler() {
super(Details.class, new BasicRowProcessor(new BeanProcessor(getColumnsToFieldsMap())));
}
public static Map<String, String> getColumnsToFieldsMap() {
Map<String, String> columnsToFieldsMap = new HashMap<>();
columnsToFieldsMap.put("PARTNER", "candidateId");
columnsToFieldsMap.put("BIRTHDT", "birthDate");
columnsToFieldsMap.put("XSEXM", "maleSex");
columnsToFieldsMap.put("XSEXF", "femaleSex");
return columnsToFieldsMap;
}
}
Есть ли способ получить ID (candidateId)
в результате и что мне не хватает в плане создания пары ключ-значение?