2013-12-12 58 views
1

謝謝。這是一個小項目。這是整個項目的代碼。代碼中發生的事情是,當下拉框加載實體類中ownerName的值時,在任何成員被選中時從下拉列表中選擇一個信用限額,然後由jsp頁面上的輸入框指定信用限額。因此,沒有爲ownerName輸入信息,但只有信用限額是根據下拉框中所選的ownerName設置的。 這是實體文件:異常hibernate插入語句

@Entity 
@Table(name = "accounts") 
public class CyclosUsers { 

    @Id 
    @Column(name = "id") 
    @GeneratedValue 
    private int id; 


    @Column(name = "owner_name") 
    private String ownerName; 

    @Column(name = "credit_limit") 
    private float creditLimit; 

    public CyclosUsers(){} 

    public CyclosUsers(String ownerName, float creditLimit) 
    { 
     super(); 
     //this.id = id; 
     this.ownerName = ownerName; 
     this.creditLimit = creditLimit; 
    } 

    public CyclosUsers(int id, String ownerName, float creditLimit) { 
     super(); 
     this.id = id; 
     this.ownerName = ownerName; 
     this.creditLimit = creditLimit; 
    } 

    public int getId() { 
     return id; 
    } 

    public void setId(int id) { 
     this.id = id; 
    } 

    public String getOwnerName() { 
     return ownerName; 
    } 

    public void setOwnerName(String ownerName) { 
     this.ownerName = ownerName; 
    } 

    public float getCreditLimit() { 
     return creditLimit; 
    } 

    public void setCreditLimit(float creditLimit) { 
     this.creditLimit = creditLimit; 
    } 

} 

這是DAO implemetation文件:

@Repository 
public class CyclosUsersDaoImpl implements CyclosUsersDao { 

    @Autowired 
    private SessionFactory sessionFactory; 

    @Override 
    public void saveCyclosUsers(CyclosUsers cyclosUsers) { 
     sessionFactory.getCurrentSession().createSQLQuery("INSERT INTO credit_limit WHERE" +" " +"WEB-INF.views.Register.ownerName.selectedItem(" +"ownerName"); 
    } 

    @SuppressWarnings("unchecked") 
    @Override 
    public List<CyclosUsers> addToDropDown() { 
     return sessionFactory.getCurrentSession().createSQLQuery("SELECT owner_name FROM accounts").list(); 
    } 

    @SuppressWarnings("unchecked") 
    @Override 
    public List<CyclosUsers> CyclosUsersAndAccountDetails() { 
     return sessionFactory.getCurrentSession().createCriteria(CyclosUsers.class).list(); 
    } 

} 

服務實現文件:

@Service 
public class CyclosUsersServiceImpl implements CyclosUsersService { 

    @Autowired 
    private CyclosUsersDao cyclosUsersDao; 

    @Override 
    @Transactional 
    public void saveCyclosUsers(CyclosUsers cyclosUsers) { 
     cyclosUsersDao.saveCyclosUsers(cyclosUsers); 
    } 

    @Override 
    @Transactional 
    public List<CyclosUsers> addToDropDown() { 
     return cyclosUsersDao.addToDropDown(); 
    } 

    @Override 
    @Transactional 
    public List<CyclosUsers> CyclosUsersAndAccountDetails() { 
     return cyclosUsersDao.CyclosUsersAndAccountDetails(); 
    } 

} 

這是控制器文件:

@Controller 
public class CyclosUsersController { 

    @Autowired 
    private CyclosUsersService cyclosUsersService; 

    @RequestMapping("/register") 
    public ModelAndView displayOverdraftForm(@ModelAttribute("cyclosUsers") CyclosUsers cyclosUsers, BindingResult bindingResult) 
    { 
     Object addMembersListToDropdown = null; 
     ArrayList<Object> membersListing = new ArrayList<>(); 
     membersListing.add(cyclosUsersService.addToDropDown()); 

     for(Object listingMembers : membersListing) 
     { 
      addMembersListToDropdown = listingMembers; 
     } 
     System.out.println(addMembersListToDropdown); 
     return new ModelAndView("Register", "addMembersListToDropdown", addMembersListToDropdown); 
    } 

    @RequestMapping("/saveCyclosUsers") 
    public ModelAndView saveCyclosUsersCredentials(@ModelAttribute("cyclosUsers") CyclosUsers cyclosUsers, BindingResult bindingResult) 
    { 
     cyclosUsersService.saveCyclosUsers(cyclosUsers); 
     System.out.println("Cyclos Users List:"); 
     return new ModelAndView("redirect:cyclosUsersList.html"); 
    } 

    @RequestMapping("/cyclosUsersList") 
    public ModelAndView listCyclosUsersOverdraftDetails() 
    { 
     @SuppressWarnings("unused") 
     CyclosUsers cyclosUsers = new CyclosUsers(); 
     Map<String, Object> model = new HashMap<String, Object>(); 
     model.put("cyclosUsers", cyclosUsersService.CyclosUsersAndAccountDetails()); 
     return new ModelAndView("cyclosUsersDetails", model); 
    } 
} 

這是JSP頁面:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 
<%@ include file = "includeFile.jsp"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
<title>Cyclos Users | Overdraft Form</title> 
</head> 
<body> 
    <center> 
     <br><br><br><br><br><br> 
     <div style = "color:steal; font:30px">Cyclos Users | Overdraft Form</div> 
     <c:url var = "overdraftGranting" value = "saveCyclosUsers.html"></c:url> 
     <form:form id = "cyclosOverdraftGrantingForm" modelAttribute = "cyclosUsers" method = "post" action = "${overdraftGranting}"> 
      <table width = "400px" height = "150px"> 
       <tr> 
        <td><form:label path="ownerName" name = "ownerName">Select Overdraft User:</form:label></td> 
        <td><form:select path="ownerName" name = "ownerName" items = "${addMembersListToDropdown}"></form:select></td> 
       </tr> 
       <tr> 
        <td><form:label path="creditLimit">Enter an Amount:</form:label></td> 
        <td><form:input path="creditLimit"/></td> 
       </tr> 
       <tr><td></td><td><input type = "submit" value = "Grant Overdraft"></td></tr> 
      </table> 
     </form:form> 
     <br> 
     <a href = "cyclosUsersList.html">Click here to see Overdraft Details</a> 
    </center> 
</body> 
</html> 

這是編譯後的錯誤日誌:

message Request processing failed; nested exception is org.hibernate.PropertyAccessException: Null value was assigned to a property of primitive type setter of nigeria.development.foundation.entity.CyclosUsers.creditLimit 

description The server encountered an internal error that prevented it from fulfilling this request. 

exception 

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.hibernate.PropertyAccessException: Null value was assigned to a property of primitive type setter of nigeria.development.foundation.entity.CyclosUsers.creditLimit 
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:659) 
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:552) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:621) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 

root cause 

org.hibernate.PropertyAccessException: Null value was assigned to a property of primitive type setter of nigeria.development.foundation.entity.CyclosUsers.creditLimit 
    org.hibernate.property.DirectPropertyAccessor$DirectSetter.set(DirectPropertyAccessor.java:83) 
    org.hibernate.tuple.entity.AbstractEntityTuplizer.setPropertyValues(AbstractEntityTuplizer.java:337) 
    org.hibernate.tuple.entity.PojoEntityTuplizer.setPropertyValues(PojoEntityTuplizer.java:200) 
    org.hibernate.persister.entity.AbstractEntityPersister.setPropertyValues(AbstractEntityPersister.java:3571) 
    org.hibernate.engine.TwoPhaseLoad.initializeEntity(TwoPhaseLoad.java:133) 
    org.hibernate.loader.Loader.initializeEntitiesAndCollections(Loader.java:854) 
    org.hibernate.loader.Loader.doQuery(Loader.java:729) 
    org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236) 
    org.hibernate.loader.Loader.doList(Loader.java:2213) 
    org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2104) 
    org.hibernate.loader.Loader.list(Loader.java:2099) 
    org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:94) 
    org.hibernate.impl.SessionImpl.list(SessionImpl.java:1569) 
    org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:283) 
    nigeria.development.foundation.daoImpl.CyclosUsersDaoImpl.CyclosUsersAndAccountDetails(CyclosUsersDaoImpl.java:30) 
    nigeria.development.foundation.serviceImpl.CyclosUsersServiceImpl.CyclosUsersAndAccountDetails(CyclosUsersServiceImpl.java:34) 
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    java.lang.reflect.Method.invoke(Method.java:601) 
    org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:307) 
    org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183) 
    org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150) 
    org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:108) 
    org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) 
    org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202) 
    com.sun.proxy.$Proxy16.CyclosUsersAndAccountDetails(Unknown Source) 
    nigeria.development.foundation.controller.CyclosUsersController.listCyclosUsersOverdraftDetails(CyclosUsersController.java:50) 
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    java.lang.reflect.Method.invoke(Method.java:601) 
    org.springframework.web.bind.annotation.support.HandlerMethodInvoker.doInvokeMethod(HandlerMethodInvoker.java:710) 
    org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:167) 
    org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:414) 
    org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:402) 
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:771) 
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:716) 
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:647) 
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:552) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:621) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 

root cause 

java.lang.IllegalArgumentException: Can not set float field nigeria.development.foundation.entity.CyclosUsers.creditLimit to null value 
    sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:164) 
    sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:168) 
    sun.reflect.UnsafeFloatFieldAccessorImpl.set(UnsafeFloatFieldAccessorImpl.java:80) 
    java.lang.reflect.Field.set(Field.java:680) 
    org.hibernate.property.DirectPropertyAccessor$DirectSetter.set(DirectPropertyAccessor.java:79) 
    org.hibernate.tuple.entity.AbstractEntityTuplizer.setPropertyValues(AbstractEntityTuplizer.java:337) 
    org.hibernate.tuple.entity.PojoEntityTuplizer.setPropertyValues(PojoEntityTuplizer.java:200) 
    org.hibernate.persister.entity.AbstractEntityPersister.setPropertyValues(AbstractEntityPersister.java:3571) 
    org.hibernate.engine.TwoPhaseLoad.initializeEntity(TwoPhaseLoad.java:133) 
    org.hibernate.loader.Loader.initializeEntitiesAndCollections(Loader.java:854) 
    org.hibernate.loader.Loader.doQuery(Loader.java:729) 
    org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236) 
    org.hibernate.loader.Loader.doList(Loader.java:2213) 
    org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2104) 
    org.hibernate.loader.Loader.list(Loader.java:2099) 
    org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:94) 
    org.hibernate.impl.SessionImpl.list(SessionImpl.java:1569) 
    org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:283) 
    nigeria.development.foundation.daoImpl.CyclosUsersDaoImpl.CyclosUsersAndAccountDetails(CyclosUsersDaoImpl.java:30) 
    nigeria.development.foundation.serviceImpl.CyclosUsersServiceImpl.CyclosUsersAndAccountDetails(CyclosUsersServiceImpl.java:34) 
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    java.lang.reflect.Method.invoke(Method.java:601) 
    org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:307) 
    org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183) 
    org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150) 
    org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:108) 
    org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) 
    org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202) 
    com.sun.proxy.$Proxy16.CyclosUsersAndAccountDetails(Unknown Source) 
    nigeria.development.foundation.controller.CyclosUsersController.listCyclosUsersOverdraftDetails(CyclosUsersController.java:50) 
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    java.lang.reflect.Method.invoke(Method.java:601) 
    org.springframework.web.bind.annotation.support.HandlerMethodInvoker.doInvokeMethod(HandlerMethodInvoker.java:710) 
    org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:167) 
    org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:414) 
    org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:402) 
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:771) 
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:716) 
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:647) 
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:552) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:621) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 

note The full stack trace of the root cause is available in the Apache Tomcat/7.0.30 logs. 
+0

根據堆棧跟蹤,錯誤來自'CyclosUsersDaoImpl'類,當它嘗試從會話列表中時。你可以從'CyclosUsersDaoImpl'類發佈'CyclosUsersAndAccountDetails'方法的代碼嗎? –

回答

1

設置爲空的屬性,

@Column(name = "credit_limit", nullable=true) //nullable set true 
private Float creditLimit; //Float instead of float 

,並使用非原始包裝類型浮動,而不是浮動(這是一個基本類型)。

+0

謝謝。你的建議解決了60%的問題。雖然錯誤消失,但插入不成立。方案是這樣的:下拉框由數據庫中帳戶表中列的ownerName值填充。 ownerName是已存在於db中的用戶,因此不會爲其創建新記錄。簡單的做法是爲ownerName插入一個creditLimit,所以當在下拉框中選擇這些ownerName時,將爲其設置creditLimit。 – kehinde

+0

你是否獲得了控制器中所選ownerName的creditLimit值..只有這個creditLimit是空值你得到一個錯誤..有點jQuery或JavaScript,並在輸入框中設置creditLimit值爲相應的ownerName從下拉框中選擇..這種方式當你提交表格時,你可以將此參數發送給控制器,然後設置信用額度值。根據在下拉列表中選擇的ownerName以編程方式執行此操作,或允許用戶手動輸入值.. – Lucky

0

堆棧跟蹤是相當清楚的:你不給你CyclosUserscreditLimit屬性賦值類,這是一個原始的,所以它不能是null

此外,我不認爲你的查詢有正確的語法;而不是:

INSERT INTO credit_limit WHERE 

嘗試類似:

INSERT INTO table_name (column_1, column_2) VALUES (value_1, value_2); 

(確切的語法可能取決於你使用的數據庫引擎而異)。

如果您發佈了CyclosUsers類的代碼,我可能會幫助更多。在@Column批註爲true