2016-05-09 6 views
1

Wir verwenden Spring jdbc Vorlage (4.1.x) und wir haben Verschachtelung Beziehung, wo unser Elternteil Kunde ist. Der Kunde kann 0 oder mehr Bestellungen haben. Jede Bestellung kann 1 oder mehrere Zeilen enthalten. Jede Werbebuchung kann direkt ein Detail und einen Status enthalten.Spring jdbc Vorlage Zuordnung mehrerer Zeilen zum übergeordneten Kind Einheit

Was wir suchen, ist map sql Abfrageergebnis (eine Abfrage mit mehreren Join), um diese Einheiten abzubilden.

Weiß jemand, wie es auf einer Reihe Ebene getan werden kann?

Antwort

0

Sie können eine ResultSetExtractor verwenden. Dann können Sie das ResultSet auf die übliche Weise bearbeiten, indem Sie es durchlaufen. Sie können Ihre RowMapper-Klassen jedoch wiederverwenden, um zu vermeiden, dass dieser Code dupliziert wird.

Beispiel:

public class OrderExtractor implements ResultSetExtractor { 

public List<Customer> extractData(ResultSet rs) throws SQLException, DataAccessException { 

    Map<Number, Customer> customers = new HashMap<>(); 

    CustomerMapper customerMapper = new CustomerMapper(); 
    OrderMapper orderMapper = new OrderMapper(); 
    LineItemMapper lineItemMapper = new LineItemMapper(); 

    while (rs.next()) { 

     Customer customer = customerMapper.mapRow(rs, -1); 
     if (!customers.containsKey(customer.getCustomerId())) { 
      customers.put(customer.getCustomerId(), customer); 
     } else { 
      customer = customers.get(customer.getCustomerId()); 
     } 

     Order order = orderMapper.mapRow(rs, -1); 
     if (!customer.hasOrder(order.getNumber())) { 
      customer.addOrder(order); 
     } else { 
      order = customer.getOrder(order.getNumber()); 
     } 

     LineItem lineItem = lineItemMapper.mapRow(rs, -1); 
     if (!order.hasLineItem(lineItem.getNumber())) { 
      order.addLineItem(lineItem); 
     } 

     // Add other child entities here 
    } 

    return new ArrayList<>(customers.values()); 
} 

}