0

我一直在关注位于此处的 NetBeans 站点上的 affableBean 教程。我遇到了一个问题,我无法提交采购订单 (checkout.jsp)。当我提交表单数据时,我收到 http 500 状态和以下错误:

警告:EJB5184:在 EJB OrderManager 上调用期间发生系统异常,方法:public int session.OrderManager.placeOrder(java.lang.String,java.lang.String,java.lang.String,java.lang.String,java .lang.String,java.lang.String,cart.ShoppingCart) 警告:EJB5184:在调用 EJB OrderManager 时发生系统异常,方法:public int session.OrderManager.placeOrder(java.lang.String,java.lang. String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,cart.ShoppingCart) 警告:com.sun.ejb.containers.BaseContainer.processSystemException ( BaseContainer.java:5215) 在 com.sun.ejb.containers.BaseContainer.completeNewTx(BaseContainer.java:5113) 在 com.sun.ejb.containers.BaseContainer.postInvokeTx(BaseContainer.java:4901) 在 com.sun.ejb .容器。BaseContainer.postInvoke(BaseContainer.java:2045) 在 com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:1994) 在 com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:222) 在 com .sun.ejb.containers.EJBLocalObjectInvocationHandlerDelegate.invoke(EJBLocalObjectInvocationHandlerDelegate.java:89) 在 com.sun.proxy.$Proxy163.placeOrder(Unknown Source) 在会话中。在会话中放置订单(未知来源)。在会话中放置订单(未知来源)。EJB31_Generated_ OrderManager _Intf_ Bean_.placeOrder(Unknown Source) at controller.ControllerServlet.doPost(ControllerServlet.java:201) at javax.servlet.http.HttpServlet.service(HttpServlet.java:688) at javax.servlet.http.HttpServlet.service(HttpServlet. java:770) at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1550) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:281) at org.apache.catalina.core .StandardContextValve.invoke(StandardContextValve.java:175) 在 org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655) 在 org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595) 在org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:161) 在 org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:331) 在 com.sun.enterprise.v3.services.impl.ContainerMapper$AdapterCallable.call(ContainerMapper.java:317) 在 com.sun 的 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231) .enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:195) 在 com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:860) 在 com.sun.grizzly.http.ProcessorTask.doProcess (ProcessorTask.java:757) 在 com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1056) 在 com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:229) 在 com.sun。 com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104) 的 com.sun.grizzly.DefaultProtocolChain 的 grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)。在 com.sun.grizzly 执行(DefaultProtocolChain.java:90)在 com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79) 在 com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54) 在 com.sun.grizzly .SelectionKeyContextTask.call(SelectionKeyContextTask.java:59) 在 com.sun.grizzly.ContextTask.run(ContextTask.java:71) 在 com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532) 在com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513) 在 java.lang.Thread.run(Thread.java:724)在 com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532) 在 com.sun 的 com.sun.grizzly.ContextTask.run(ContextTask.java:71) 调用(SelectionKeyContextTask.java:59) .grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513) 在 java.lang.Thread.run(Thread.java:724)在 com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532) 在 com.sun 的 com.sun.grizzly.ContextTask.run(ContextTask.java:71) 调用(SelectionKeyContextTask.java:59) .grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513) 在 java.lang.Thread.run(Thread.java:724)

原因:javax.validation.ConstraintViolationException:在对回调事件执行自动 Bean 验证时违反了 Bean 验证约束:'prePersist'。有关详细信息,请参阅嵌入式 ConstraintViolations。在 org.eclipse.persistence.internal.jpa.metadata.listeners.BeanValidationListener.prePersist(BeanValidationListener.java:62) 的 org.eclipse.persistence.internal.jpa.metadata.listeners.BeanValidationListener.validateOnCallbackEvent(BeanValidationListener.java:90)在 org.eclipse.persistence.descriptors.DescriptorEventManager.notifyListener(DescriptorEventManager.java:698) 在 org.eclipse.persistence.descriptors.DescriptorEventManager.notifyEJB30Listeners(DescriptorEventManager.java:641) 在 org.eclipse.persistence.descriptors.DescriptorEventManager。

ControllerServlet第201行为:int orderId= orderManager.placeOrder(name,email,phone,address,cityRegion,ccNumber,cart);

OrderManager 的第 88 和 56 行是:em.persist(customer); em.persist(订单);

在运行调试会话时,似乎persist 方法在这两种情况下都具有空值。我的结论是,因为数据库没有生成id,所以它的persist 方法具有空值。我不明白我现在做什么来将数据保存在我的数据库表中。谢谢您的回复。

4

1 回答 1

1

customer_order 表不期望 datecreated 为空值(尽管它提供了默认时间戳)。CustomerOrder ejb 还在 dateCreated 上放置了一个 @NotNull 注释。然而,第 201 行没有传递 CustomerOrder 对象构造的 dateCreated 值。

因此,您可以执行以下操作之一 - 禁用 @NotNull 注释(虽然是个坏主意!)或者 - 在 CustomerOrder 类的默认构造函数中提供 dateCreated 值。

public CustomerOrder() {
    // set dateCreated to timestamp ...
    java.util.Date date= new java.util.Date();
    dateCreated = new Timestamp(date.getTime());
}

埃德加

于 2013-11-22T18:13:49.747 回答