和蔼可亲的Bean Java EJB Glassfish教程问题

和蔼可亲的Bean Java EJB Glassfish教程问题,java,glassfish,ejb,Java,Glassfish,Ejb,我一直在关注位于NetBeans站点的affableBean教程 代码回购 我遇到了一个无法提交采购订单的问题(checkout.jsp)。 提交表单数据时,我收到http 500状态和以下错误: WARNING: EJB5184:A system exception occurred during an invocation on EJB OrderManager, method: public java.util.Map session.OrderManager.getOrderDetail

我一直在关注位于NetBeans站点的affableBean教程

代码回购

我遇到了一个无法提交采购订单的问题(checkout.jsp)。 提交表单数据时,我收到http 500状态和以下错误:

WARNING: EJB5184:A system exception occurred during an invocation on EJB OrderManager, method: public java.util.Map session.OrderManager.getOrderDetails(int)
WARNING: javax.ejb.EJBException at controller.ControllerServlet.doPost(ControllerServlet.java:184)
Caused by: java.lang.NullPointerException at session.OrderManager.getOrderDetails(OrderManager.java:111)
ControllerServlet的第184行是:映射orderMap= orderManager.getOrderDetails(orderId)

OrderManager的第111行是:Customer-Customer=order.getCustomer()

运行调试会话时,罪魁祸首似乎是getOrderDetails()方法中OrderManger中的行。据我所知,该行应该用订单的customer填充customer对象

查看.getCustomer()方法的来源,它来自CustomerOrder实体类:

private Customer customer;    
...
public Customer getCustomer() {
        return customer;
    }
看起来很简单,它返回Customer对象。让我困惑的是,为什么我会收到一个null指针异常,为什么这个对象是空的

我相信这可能是因为我的实体类不正确,这反过来意味着我从实体图向前设计的数据库不正确,我走的是正确的道路吗

编辑:

已从ordermanager类中的placeOrder()方法中删除try catch块 因此,将返回值修改为0

我遇到了其他问题:

WARNING: EJB5184:A system exception occurred during an invocation on EJB OrderManager, method: public int session.OrderManager.placeOrder(java.lang.String,....,cart.ShoppingCart)
WARNING: javax.ejb.EJBException
javax.validation.ConstraintViolationException: Bean Validation constraint(s) violated while executing Automatic Bean Validation on callback event:'prePersist'.**

at session.OrderManager.addCustomer(OrderManager.java:58) (*em.persist()*)
    at session.OrderManager.placeOrder(OrderManager.java:42)   (*Customer customer = addCustomer()*)
我目前正在阅读如何迭代错误并找到我失败的约束

Edit2:

调试addCustomer方法我看到客户id为空,可以吗?我假设是因为ID数据库字段设置为自动递增,但在这种情况下,实体中有一个可设置的ID字段似乎很奇怪

Edit3:
事实证明,我的实体类中自动生成的[NotNull]标记导致bean验证失败,删除了标记,它工作正常。

我看到的NPE抛出的唯一可能原因是,
order
本身是一个空对象

由于命令由以下人员发出:

CustomerOrder order = customerOrderFacade.find(orderId);

我的结论是,数据库中根本不存在带有该命令ID的命令。

我认为引发NPE的唯一可能原因是,
命令本身是一个空对象

由于命令由以下人员发出:

CustomerOrder order = customerOrderFacade.find(orderId);

我的结论是,数据库中根本不存在具有该
orderId
的订单。

您是对的,我在orderManager placeOrder()方法上运行了一个调试会话,try-catch块将getID值覆盖为0'return order.getID();}catch(异常e){context.setRollbackOnly();return 0;}'谢谢。您是对的,我在orderManager placeOrder()方法上运行了一个调试会话,try-catch块将getID值覆盖为0'return order.getID();}catch(异常e){context.setRollbackOnly();return 0;}'谢谢。您最好创建一个新问题您最好创建一个新问题