首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >弹簧RowMapper NullPointerException

弹簧RowMapper NullPointerException
EN

Stack Overflow用户
提问于 2013-12-13 21:02:04
回答 1查看 1.9K关注 0票数 1

我试着四处寻找我的问题的答案,但一直未能解决。

我的应用程序在第46行的RowMapper类中抛出一个NPE:

代码语言:javascript
复制
orderLineRepository.sqlGetOrderLinesForOrder(rs.getInt("orderId"))

有人能帮帮我吗?我不太确定这是怎么回事。

这里有一个类的副本:

代码语言:javascript
复制
@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());
    }

}

订单行映射器:

代码语言:javascript
复制
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,下面是:

代码语言:javascript
复制
@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());
    }

}

如果需要的话,这是我的

代码语言:javascript
复制
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;
    }

}

谢谢你能提供的任何帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-13 21:04:18

当您自己创建对象时,您如何期望Spring自动创建任何东西?

代码语言:javascript
复制
return namedJdbc.query(sql, params, new OrderLineRowMapper());

Spring只能将bean注入到其他Spring托管bean中。

让Spring创建一个OrderLineRowMapper bean并在您的OrderLineRepository类中注入并使用它。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20575930

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档