2013-12-13 3 views
1

Я попытался оглянуться, чтобы ответить на мою проблему, но не смог ее решить.Spring RowMapper NullPointerException

Мое приложение бросает NPE в моем классе RowMapper в строке 46:

orderLineRepository.sqlGetOrderLinesForOrder(rs.getInt("orderId")) 

Может кто-то пожалуйста, помогите мне с этим? Я не слишком уверен, что с ним не так.

Вот копия классов:

@Repository("orderRepository") 
public class OrderRepository { 

    @Autowired 
    private JdbcTemplate jdbc; 

    public Order sqlGetOrderByOrderId(int orderId) { 
     String sql = "SELECT om.orderId, om.orderRef, om.orderChannel, " 
       + "om.orderCreated, om.orderCompleted, om.orderStatus, " 
       + "c.customerId, c.name, c.email, c.phoneNumber, " 
       + "a.addressId, a.houseNameNumber, a.streetName, " 
       + "a.addressLine2, a.addressLine3, a.addressLine4, " 
       + "a.postCode, a.countryCode " 
       + "FROM OrderMain om " 
       + "INNER JOIN Customer c ON om.customerId=c.customerId " 
       + "INNER JOIN Address a ON om.addressId=a.addressId " 
       + "WHERE om.orderId=?"; 

     return jdbc.queryForObject(sql, new Object[] {orderId}, new OrderRowMapper()); 
    } 

} 

Заказать ряд картографа:

public class OrderRowMapper implements RowMapper<Order> { 

    @Autowired 
    private OrderLineRepository orderLineRepository; 

    public Order mapRow(ResultSet rs, int rowNum) throws SQLException { 
     Customer customer = new Customer(); 
     customer.setCustomerId(rs.getInt("customerId")); 
     customer.setName(rs.getString("name")); 
     customer.setEmail(rs.getString("email")); 
     customer.setPhoneNumber(rs.getString("phoneNumber")); 

     Address address = new Address(); 
     address.setAddressId(rs.getInt("addressId")); 
     address.setHouseNameNumber(rs.getString("houseNameNumber")); 
     address.setStreetName(rs.getString("streetName")); 
     address.setAddressLine2(rs.getString("addressLine2")); 
     address.setAddressLine3(rs.getString("addressLine3")); 
     address.setAddressLine4(rs.getString("addressLine4")); 
     address.setPostcode(rs.getString("postcode")); 
     address.setCountryCode(rs.getString("countryCode")); 

     Order order = new Order(
        rs.getInt("orderId"), 
        rs.getString("orderRef"), 
        rs.getString("orderChannel"), 
        rs.getTimestamp("orderCreated"), 
        rs.getTimestamp("orderCompleted"), 
        OrderStatus.orderStatusGetById(rs.getInt("orderStatus")), 
        customer, 
        address, 
        orderLineRepository.sqlGetOrderLinesForOrder(rs.getInt("orderId")) 
       ); 

     return order; 
    } 

} 

Это звонит мой orderLineRepository ниже:

@Repository("orderLineRepository") 
public class OrderLineRepository { 

    @Autowired 
    private JdbcTemplate jdbc; 

    @Autowired 
    private NamedParameterJdbcTemplate namedJdbc; 

    public List<OrderLine> sqlGetOrderLinesForOrder(int orderId) { 
     Map<String, Object> params = new HashMap<String, Object>(); 
     params.put("orderId", orderId); 

     String sql = "SELECT itemId, orderQty, cancelledQty, " 
       + "despatchedQty, replacedQty, refundedQty, " 
       + "orderLineStatus, orderValue, unitValue, " 
       + "shippingCost " 
       + "FROM OrderLine " 
       + "WHERE orderId=:orderId"; 

     return namedJdbc.query(sql, params, new OrderLineRowMapper()); 
    } 

    public List<OrderLine> sqlGetAllOrderLines() { 
     String sql = "SELECT itemId, orderQty, cancelledQty, " 
       + "despatchedQty, replacedQty, refundedQty, " 
       + "orderLineStatus, orderValue, unitValue, " 
       + "shippingCost " 
       + "FROM OrderLine"; 

     return jdbc.query(sql, new OrderLineRowMapper()); 
    } 

} 

При необходимости, вот мой OrderLineRowMapper:

public class OrderLineRowMapper implements RowMapper<OrderLine> { 

    public OrderLine mapRow(ResultSet rs, int rowNum) throws SQLException { 
     OrderLine orderLine = new OrderLine(); 
      orderLine.setItemId(rs.getInt("itemId")); 
      orderLine.setOrderQty(rs.getInt("orderQty")); 
      orderLine.setCancelledQty(rs.getInt("cancelledQty")); 
      orderLine.setDespatchedQty(rs.getInt("despatchedQty")); 
      orderLine.setReplacedQty(rs.getInt("replacedQty")); 
      orderLine.setRefundedQty(rs.getInt("refundedQty")); 
      orderLine.setOrderLineStatus(OrderLineStatus.orderLineStatusGetById(rs.getInt("orderLineStatus"))); 
      orderLine.setOrderValue(rs.getDouble("orderValue")); 
      orderLine.setUnitValue(rs.getDouble("unitValue")); 
      orderLine.setShippingCost(rs.getDouble("shippingCost")); 
     return orderLine; 
    } 

} 

Заранее спасибо за любую помощь, вы можете предложить!

ответ

2

Как вы ожидаете, что Spring будет автоувеличивать что-либо, когда вы сами создаете объект?

return namedJdbc.query(sql, params, new OrderLineRowMapper()); 

Весна может только вставлять бобы в другие весенние управляемые бобы.

Имейте весну, создайте фасоль OrderLineRowMapper и добавьте ее в свой класс OrderLineRepository.

+0

Если это так, почему оно возвращает правильные результаты, когда я создаю службу, которая вызывает мой OrderLineRepository напрямую, а не через мой OrderRowMapper? – Xezefal

+0

@user Я допустил ошибку, смутил 'OrderRowMapper' с' OrderLineRowMapper'. Как и где вы используете 'OrderRowMapper'? –

+0

OrderRowMapper используется в моем OrderRepository, я обновляю свой пост. – Xezefal

Смежные вопросы