java.lang.NumberFormatException: For input string: “id” for Hibernate

放肆的年华 提交于 2019-12-11 16:47:57

问题


I want to pass the join query results from controller to view , but I am getting error "java.lang.NumberFormatException: For input string: "id"

I have already go through the duplicated questions and applied the solutions for my scenario but it is not getting successful. Duplicated Question -1 Duplicated Question -2 Duplicated Question -3

DAO code

  public  List<Object [] >  showEmployee_Role(){

    try {

          Session session=HibernateUtil.getSessionFactory().openSession();
          SQLQuery query = session.createSQLQuery("select e.id as eid , r.id as rid , e.ename , e.enumber , r.description from employee_profile e  INNER JOIN role r ON (e.role_id = r.id)"); 

          List <Object []> employee_role =query.list();
          return employee_role;

    } catch (Exception e) {

       System.out.println("Error in Show Employee_Role"+e.getMessage()); 
    }

    return null;

}

Controller Code

        List<Object []>showEmployee_role=employeeDaoImpl.showEmployee_Role();
        request.setAttribute("employeeList", showEmployee_role);
        RequestDispatcher rd = request.getRequestDispatcher("EmployeeView.jsp");
        rd.forward(request, response);

View Code

    <c:forEach  items="${employeeList}" var="emp">

      <tr>  
       <td> ${emp.id} </td> 
       <td> ${emp.ename} </td> 
       <td> ${emp.enumber}</td> 
       <td> ${emp.description}</td> 
     </tr>
    </c:forEach>

Employee Entity

@Entity(name="employee_profile")
public class Employee  implements Serializable{


private int id;
private String ename;
private String enumber;
private Role role;
private Collection <Task> task;



public Employee() {

}


public Employee(String ename,String enumber,Role role){

    this.ename=ename;
    this.enumber=enumber;
    this.role=role;  
}

@Id @GeneratedValue
@Column(name="id")
 public int getId() {
    return id;
}

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

public String getEname() {
    return ename;
}

public void setEname(String ename) {
    this.ename = ename;
}

public String getEnumber() {
    return enumber;
}

public void setEnumber(String enumber) {
    this.enumber = enumber;
}

@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "role_id")
public Role getRole() {
    return role;
}

public void setRole(Role role) {
    this.role = role;
}



@OneToMany(cascade=CascadeType.ALL)
@JoinTable(
        name="employee_task",
        joinColumns=@JoinColumn(name="eid"),
        inverseJoinColumns=@JoinColumn(name="tid")
)
public Collection<Task> getTask() {
    return task;
}

public void setTask(Collection<Task> task) {
    this.task = task;
}}

Role Entity

@Entity(name="role")
public class Role implements Serializable{


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

private String title;
private String description;


public int getId() {
    return id;
}

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

public String getTitle() {
    return title;
}

public void setTitle(String title) {
    this.title = title;
}

public String getDescription() {
    return description;
}

public void setDescription(String description) {
    this.description = description;
}


}

Stack trace

Info:   Hibernate: select role0_.id as id1_2_, role0_.description as descript2_2_, role0_.title as title3_2_ from role role0_
Info:   Hibernate: select task0_.id as id1_3_, task0_.tname as tname2_3_ from task task0_
Info:   Hibernate: select employee0_.id as col_0_0_ from employee_profile employee0_ inner join role role1_ on employee0_.role_id=role1_.id
Info:   Hibernate: select e.id as eid , r.id as rid , e.ename , e.enumber , r.description from employee_profile e  INNER JOIN role r ON (e.role_id = r.id)
Info:   Hibernate: select role0_.id as id1_2_, role0_.description as descript2_2_, role0_.title as title3_2_ from role role0_
Info:   Hibernate: select task0_.id as id1_3_, task0_.tname as tname2_3_ from task task0_
Warning:   Servlet.service() for servlet jsp threw exception
java.lang.NumberFormatException: For input string: "id"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:580)
at java.lang.Integer.parseInt(Integer.java:615)
at javax.el.ArrayELResolver.toInteger(ArrayELResolver.java:378)
at javax.el.ArrayELResolver.getValue(ArrayELResolver.java:198)
at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:188)
at com.sun.el.parser.AstValue.getValue(AstValue.java:140)
at com.sun.el.parser.AstValue.getValue(AstValue.java:204)
at com.sun.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:226)
at org.apache.jasper.runtime.PageContextImpl.evaluateExpression(PageContextImpl.java:1016)
at org.apache.jsp.EmployeeView_jsp._jspx_meth_c_forEach_0(EmployeeView_jsp.java:297)
at org.apache.jsp.EmployeeView_jsp._jspService(EmployeeView_jsp.java:125)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:111)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:411)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:473)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:377)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1682)
at org.apache.catalina.core.ApplicationDispatcher.doInvoke(ApplicationDispatcher.java:875)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:739)
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:575)
at org.apache.catalina.core.ApplicationDispatcher.doDispatch(ApplicationDispatcher.java:546)
at org.apache.catalina.core.ApplicationDispatcher.dispatch(ApplicationDispatcher.java:428)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:378)
at Controller.EmployeeController.doPost(EmployeeController.java:214)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1682)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:318)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:160)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:734)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:673)
at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:99)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:174)
at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:416)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:283)
at com.sun.enterprise.v3.services.impl.ContainerMapper$HttpHandlerCallable.call(ContainerMapper.java:459)
at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:167)
at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:206)
at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:180)
at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:235)
at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:283)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:200)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:132)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:111)
at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)
at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:536)
at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:117)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:56)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:137)
at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:591)
at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:571)
at java.lang.Thread.run(Thread.java:748)

回答1:


Can you please Modify your Dao Class like this.

SQLQuery query = session.createSQLQuery("select e.id as eid , r.id as rid , e.ename , e.enumber , r.description from employee_profile e  INNER JOIN role r ON (e.role_id = r.id)"); 

 List <Object []> rows =query.list();
 List <Employee> employee_role = new ArralList<>();
for(Object[] row : rows){
    Employee emp = new Employee();
    Role role = new Role();

    emp.setId(Integer.parseInteger(row[0].toString()));
    role.setId(Integer.parseInteger(row[1].toString()));
    emp.setEname(row[2].toString());
    emp.setEnumber(row[3].toString()));
    role.setDescription(row[4].toString()));
    emp.setRole(role);


    employee_role.add(emp);
    }
 return employee_role;

"list()" method of SQLQuery class - will always return the list of Objects that you need to type cast to Employee Object. This is what is missing in your code.

In view , For Role attributes like rid , Description - can you please modify your EL like {emp.role.description} and same for rid`




回答2:


Each row in your sql query result is an array as you can see in you declaration:

List <Object []> employee_role =query.list();

In your jsp, you try to access each array's contents using a property name, which you don't have. Instead, you have arrays, which means you have to access the content with an index. Try:

 <td> ${emp[0]} </td> 
 <td> ${emp[1]} </td>

and so on.

The exception is caused by the EL evaluator (see the stacktrace: javax.el.ArrayELResolver.getValue) that tries to treat the property name as in index of the emp array, attempting to convert it to an Tnteger. Of course that doesnt work for the String "id".




回答3:


According to the documentation of SQLQuery. The values in the list are Object[] array. Could you please try emp[0] for id value and similarly for ename-emp[2],enumber - emp[3],description - emp[4]



来源:https://stackoverflow.com/questions/46846044/java-lang-numberformatexception-for-input-string-id-for-hibernate

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!