заполнение объектов bean из набора результатов

Я столкнулся с проблемой заполнения объектов bean из набора результатов.

Описание: Набор результатов содержит результат хранимой процедуры, представляющей собой объединение трех таблиц B, BO и BOV.

У меня есть 3 POJO, соответствующие таблицам. Связь между таблицами такова: B может иметь 0 или более BO, BO может иметь 0 или более BOV. Итак, всего в наборе результатов у меня есть 162 записи, которые содержат дубликаты для B.

Например:

B  BO   BOV
1  1     1
1  1     2
1  2     1
2  1     1 

и так далее.

На самом деле существует 10 различных B. Итак, я хочу только 10 B из набора результатов, а не 162 записи. Также я должен быть в состоянии получить соответствующие BO и BOV как для B=1 всех значений BO и BOV.

Как я могу это сделать? Это чистая логика Java и ничего не может изменить для хранимой процедуры. Просто нужно обработать набор результатов.


person Rashmi    schedule 06.03.2010    source источник
comment
Может быть, это только я ... но я думаю, вам нужно перефразировать свой вопрос. Это действительно сбивает с толку. Возможно, опубликуйте пример перенастроенного набора результатов.   -  person Paul    schedule 06.03.2010
comment
Я отформатировал его. Он не знал о возможностях Markdown.   -  person BalusC    schedule 06.03.2010


Ответы (2)


Имейте работающую карту набора результатов, вот возможный псевдокод

[только псевдокод... компиляция не гарантируется]

Map mapofBs = new HashMap();
while(rs.hashNext()) {
    rs.next();
    String bId = rs.getString("columnname for id of b");
    B objectB = mapofBs.get(bId);
    if(objectB == null) {
        objectB = new B();
        //read relevant columns from result set and put into objectB
        mapOfBs.put(bId, objectB)
    }   
    //now onto the boId
    String boId = rs.getString("columnname for id of BO");
    BO objectBO = objectB.getBOForId(boId);
    if(objectBO == null) {
        objectBO = new BO();
        //read relevat columns from result set for objectBO
        objectB.addObjectBO(objectBO);
    }
    String bovID = s.getString("columnname for id of BOV");
    BOV objectBOV = objectBO.getBOVForId(bovId);
    if(objectBOV == null) {
        objectBOV = new BOV();
        //read relevat columns from result set for objectBOV
        objectBO.addObjectBOV(objectBOV);
    }
}
//mapOfBs.keySet() gives you a Set<B> which you are interested in
person Kannan Ekanath    schedule 06.03.2010

Изменение запроса для включения GROUP BY — лучший вариант.

person user207421    schedule 06.03.2010
comment
Он заявил, что не может ничего изменить в Stored Proc. - person Paul; 06.03.2010
comment
Я хорошо знаю об этом, но это все еще лучший ответ. Нередко такие ограничения волшебным образом исчезают, как только появляется обоснование. Обоснование здесь в том, что это тривиально в хранимой процедуре и очень эффективно, в отличие от того, чтобы явно неопытный программист боролся со многими строками Java, чтобы сделать то же самое черт знает насколько неэффективным способом. - person user207421; 08.03.2010