2013-04-18 3 views
0

У моего объекта модели есть атрибут CtlgEntry, который имеет атрибут 'YearPublished'. Форма должна быть заполнена, но выбрасывается следующее сообщение об ошибке:Весенняя форма, не заполняющая данные объекту модели

org.hibernate.PropertyAccessException: Null value was assigned to a property of primitive type setter of com.csu.library.mvc.dto.CatalogueEntry.yearPublished] with root cause 
java.lang.IllegalArgumentException 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.hibernate.property.BasicPropertyAccessor$BasicSetter.set(BasicPropertyAccessor.java:65) 
    at org.hibernate.tuple.entity.AbstractEntityTuplizer.setPropertyValues(AbstractEntityTuplizer.java:707) 
    at org.hibernate.tuple.entity.PojoEntityTuplizer.setPropertyValues(PojoEntityTuplizer.java:371) 
    at org.hibernate.persister.entity.AbstractEntityPersister.setPropertyValues(AbstractEntityPersister.java:4463) 
    at org.hibernate.event.internal.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:276) 
    at org.hibernate.event.internal.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:193) 
    at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:126) 
    at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:204) 
    at org.hibernate.event.internal.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:55) 
    at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:189) 
    at org.hibernate.event.internal.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:49) 
    at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:90) 
    at org.hibernate.internal.SessionImpl.fireSave(SessionImpl.java:756) 
    at org.hibernate.internal.SessionImpl.save(SessionImpl.java:748) 
    at org.hibernate.internal.SessionImpl.save(SessionImpl.java:744) 
    at com.csu.library.mvc.dao.generic.GenericHibernateDao.save(GenericHibernateDao.java:73) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150) 
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) 
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204) 
    at com.sun.proxy.$Proxy54.save(Unknown Source) 
    at com.csu.library.mvc.service.impl.CatalogueEntryServiceImpl.addItem(CatalogueEntryServiceImpl.java:22) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150) 
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) 
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204) 
    at com.sun.proxy.$Proxy55.addItem(Unknown Source) 
    at com.csu.library.mvc.controller.CatalogueEntryController.addCatalogueEntry(CatalogueEntryController.java:42) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:219) 
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132) 
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104) 
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:745) 
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:686) 
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80) 
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:925) 
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856) 
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:920) 
    at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:827) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:647) 
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:801) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:728) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99) 
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:947) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1009) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589) 
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918) 
    at java.lang.Thread.run(Thread.java:680) 

Другие данные загружаются на объект, но только yearPublished бросает ошибку. Ниже приведен код формы Jsp который заполнит деталь catalogueEntry:

<form:form method="POST" action="addCatalogueEntry" commandName="catalogueEntry"> 
     <table> 
      <tr> 
      <td><form:label path="title">Title Of Book:</form:label></td> 
      <td><form:input path="title"/></td> 
      </tr> 
      <tr> 
      <td><form:label path="yearPublished">Year Published:</form:label></td> 
      <td><form:input path="yearPublished"/></td> 
      </tr> 
      <tr> 
      <td><form:label path="isbn">ISBN Number:</form:label></td> 
      <td><form:input path="isbn"/></td> 
      </tr> 
      <tr> 
      <td><form:label path="publisher">Publisher:</form:label></td> 
      <td><form:input path="publisher"/></td> 
      </tr> 
      <tr> 
      <td><form:label path="countryOfPublication">Country Of Publication</form:label></td> 
      <td><form:input path="countryOfPublication"/></td> 
      </tr> 
      <tr> 
      <td><form:label path="authors">Authors</form:label></td> 
      <td><form:input path="authors"/></td> 
      </tr> 

      <!--<c:forEach items="$catalogueEntry.authorList" var="author" varStatus="status"> 
      <tr> 
       <td>First Name</td> 
       <td><input name="authorList[${status.index}].firstName" id="authorList[${status.index}].firstName"/></td> 
       <%-- 
        <td><form:input path="personList[${i.index}].name" id="name${i.index}" /></td> 
        <td><form:input path="personList[${i.index}].age" id="age${i.index}" /></td> 
       --%> 

      </tr> 
      <tr> 
       <td>Last Name</td> 
       <td><input name="authorList[${status.index}].lastName" id="authorList[${status.index}].lastName"/></td> 
      </tr> 
      </c:forEach> 
      --> 
      <tr> 
      <td><input type="submit" value="CLEAR" /></td> 
      <td><input type="submit" value="SUBMIT" /></td> 
      </tr> 
     </table> 
    </form:form> 

методы получения и установки для поля является:.

private Integer yearPublished; 

@Column(name="year_published") 
@NotNull 
public Integer getYearPublished() { 
    return yearPublished; 
} 

public void setYearPublished(int yearPublished) { 
    this.yearPublished = yearPublished; 
} 
+0

Используйте не-примитивные типы оберток для этого поля! – NINCOMPOOP

+0

Что такое тип данных 'YearPublished' и каков его метод setter? – NINCOMPOOP

ответ

1

Используйте непримитивные типы оболочки (например, Integer для int, Float для float).

+0

проверьте обновления. Я уже использовал классы-оболочки. Я загрузил данные с помощью метода hibernate persist() в классе тестера, и он принимает и загружает данные в базу данных. –

+0

Можете ли вы сделать это? Public void setYearPublished (Integer yearPublished) '? – NINCOMPOOP

+0

спасибо кучи. теперь работает. –

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