2016-05-09 21 views
1

私たちはspring jdbcテンプレート(4.1.x)を使用しており、親がCustomerのネスト関係にあります。お客様は0件以上注文できます。各注文には、1つまたは複数のラインアイテムを含めることができます。各広告申込情報には、1つの詳細とステータスが必要です。spring jdbcテンプレート複数の行を親子エンティティにマッピング

私たちが探しているのは、このエンティティをマップするmap sql query result(複数の結合を持つ1つのクエリ)です。

どのように行レベルで行うことができます知っていますか?

答えて

0

ResultSetExtractorを使用できます。次に、それを反復処理することによってResultSetを通常の方法で処理することができます。ただし、RowMapperクラスを再利用して、そのコードの重複を避けることができます。

例:

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()); 
} 

}

関連する問題