Я попытался оглянуться, чтобы ответить на мою проблему, но не смог ее решить.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;
}
}
Заранее спасибо за любую помощь, вы можете предложить!
Если это так, почему оно возвращает правильные результаты, когда я создаю службу, которая вызывает мой OrderLineRepository напрямую, а не через мой OrderRowMapper? – Xezefal
@user Я допустил ошибку, смутил 'OrderRowMapper' с' OrderLineRowMapper'. Как и где вы используете 'OrderRowMapper'? –
OrderRowMapper используется в моем OrderRepository, я обновляю свой пост. – Xezefal