IN hibernate Ljava.lang.Object;无法转换为模型类型

时间:2014-09-28 19:10:51

标签: hibernate

我是Hibernate的新手

我正在使用带有hibernate的spring,我正在使用HQl查询从数据库中获取数据(使用mysql)。 我收到Type case error

java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to com.dineshonjava.model.EmployeePayment
at com.dineshonjava.dao.EmployeePaymentDaoImpl.listEmployeesPayment(EmployeePaymentDaoImpl.java:35)
at com.dineshonjava.service.EmployeePaymentServiceImpl.listEmployeesPayment(EmployeePaymentServiceImpl.java:31)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:307)
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:108)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
at $Proxy22.listEmployeesPayment(Unknown Source)
at com.dineshonjava.controller.EmployeeController.listEmployeesPaymentDetail(EmployeeController.java:152)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.doInvokeMethod(HandlerMethodInvoker.java:710)
at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:167)
at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:414)
at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:402)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:771)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:716)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:647)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:552)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
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.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
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:502)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at 

在Dao Layer我使用了Code.From查询我能够获得List的确切大小。但是无法从该List获取值。它给出了TypeCast错误 EmployeePayment是模型的名称

@SuppressWarnings("unchecked")
public List<EmployeePayment> listEmployeesPayment() {

    List<EmployeePayment> empList = (List<EmployeePayment>) sessionFactory
            .getCurrentSession()
            .createQuery(
                    "select e.employeePaymentId ,e.paymentDate,e.comment,e.amount from EmployeePayment e ,Employee e1 where e1.empId= e.employee")
            .list();
    List<EmployeePayment> myList = new ArrayList<EmployeePayment>();

    System.out.println("emplist size" + empList.size());
    Iterator iter = empList.iterator();
    while (iter.hasNext()) {

        EmployeePayment c = new EmployeePayment();
        c = (EmployeePayment) iter.next();
        System.out.println(" customer comment is :" + c.getComment());
    }
    return empList;
}

EmployeePayment.java

package com.dineshonjava.model;

  import javax.persistence.Column;
  import javax.persistence.Entity;
  import javax.persistence.GeneratedValue;
  import javax.persistence.GenerationType;
 import javax.persistence.Id;
 import javax.persistence.JoinColumn;
 import javax.persistence.ManyToOne;
 import javax.persistence.Table;
 @Entity
 @Table(name="employee_payment")
  public class EmployeePayment {
   @Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name = "employeePaymentId")
private Integer employeePaymentId;

@Column(name ="comment")
private String  comment;

@Column(name ="paymentDate")
private String paymentDate;

@Column(name ="amount")
private Integer amount;

@ManyToOne  
 @JoinColumn(name = "empid") 
private Employee employee;

public Integer getEmployeePaymentId() {
    return employeePaymentId;
}
public void setEmployeePaymentId(Integer employeePaymentId) {
    this.employeePaymentId = employeePaymentId;
}
public void setAmount(Integer amount) {
    this.amount = amount;
}
public String getComment() {
    return comment;
}
public void setComment(String comment) {
    this.comment = comment;
}
public String getPaymentDate() {
    return paymentDate;
}
public void setPaymentDate(String paymentDate) {
    this.paymentDate = paymentDate;
}


public Integer getAmount() {
    return amount;
}
public Employee getEmployee() {
    return employee;
}
public void setEmployee(Employee employee) {
    this.employee = employee;
}

}

2 个答案:

答案 0 :(得分:2)

如果要获取实体对象,则应使用结果转换器;

    List<EmployeePayment> empList = (List<EmployeePayment>) sessionFactory
            .getCurrentSession()
            .createQuery(
                    "select e.employeePaymentId  as employeePaymentId, e.paymentDate as paymentDate, e.comment as comment, e.amount as amount from EmployeePayment e ,Employee e1 where e1.empId= e.employee")
            .setResultTransformer(Transformers.aliasToBean(EmployeePayment.class))
            .list();

答案 1 :(得分:1)

尝试以下方式:

 List<EmployeePayment> empList = (List<EmployeePayment>) sessionFactory
            .getCurrentSession()
            .createQuery(
                    "select e from EmployeePayment e ,Employee e1 where e1.empId= e.employee")
            .list();