2017-10-04 85 views
-1

我想用下面的代碼中定義的Hibernate Criteria API運行SELECT查詢。我檢查了控制檯,它似乎是 查詢運行良好。以下是我在控制檯的SQL查詢我越來越:java.lang.ClassCastException:java.lang.Integer不能轉換爲abc.def.myproject.orm.EmployeeTopMetaData

​​

但略低於控制檯上面的SQL,我看到的錯誤:

java.lang.ClassCastException: java.lang.Integer cannot be cast to abc.def.myproject.orm.EmployeeTopMetaData 
    at abc.def.myproject.orm.dao.impl.EmpDaoImpl.insertEmployeeDetails(EmployeeDaoImpl.java:50) 

和線路#50以下按照以下方法行:

(EmployeeTopMetaData) session.createCriteria(EmployeeTopMetaData.class) 

以下方法在EmployeeDaoImpl java類中定義。

public boolean insertEmployeeDetails(Employee employee) 
     { 
      logger.debug("Starting EmployeeDaoImpl.insert() ....."); 
      Session session = null; 
      Transaction tx = null; 
      boolean status = true; 
      try { 
       session = sessionFactory.openSession(); 
       tx = session.beginTransaction(); 


       EmployeeTopMetaData empMetaData = 
        (EmployeeTopMetaData) session.createCriteria(EmployeeTopMetaData.class) // This is the line #50 
        .setProjection(Projections.property("valueEmpId")) 
        .add(Restrictions.eq("testingId", 1234)) 
        .add(Restrictions.eq("company_employee_id", 3345)) 
        .uniqueResult(); 

       if (empMetaData == null || empMetaData. getvalueEmpId() < 1) { throw new Exception("Invalid empMetaData"); }  
       System.out.println("October 04 EmployeeTopMetaData: "); 
       System.out.println(empMetaData. getvalueEmpId()); 


       // Some more code to go 



       session.persist(employee); 
       tx.commit(); 


      } catch(Exception ex) { 
       tx.rollback(); 
       ex.printStackTrace(); 
       status = false; 
      } finally { 
       session.close(); 
      } 
      logger.debug("Completed EmployeeDaoImpl.insert() ....."); 
      return status; 
     } 

這裏是我的實體類EmployeeTopMetaData.java

package abc.def.myproject.orm; 


@Entity 
@Table(name="EMPLOYEE_TOP_METADATA") 
public class EmployeeTopMetaData 
{  
    public int getTestingId() { 
     return testingId; 
    } 

    public void setTestingId(int testingId) { 
     this.testingId = testingId; 
    } 

    public int getCompanyEmpId() { 
     return company_employee_id; 
    } 

    public void setCompanyEmpId(int company_employee_id) { 
     this.company_employee_id = company_employee_id; 
    } 


    public int getvalueEmpId() { 
     return valueEmpId; 
    } 

    public void setvalueEmpId(int valueEmpId) { 
     this.valueEmpId = valueEmpId; 
    } 

    @Id 
    @Column(name="TESTING_ID") 
    private int testingId; 

    @Column(name="COMPANY_EMP_ID") 
    private int company_employee_id; 


    @Column(name="VALUE_EMP_ID") 
    private int valueEmpId; 

} 
+0

這是您的代碼嗎?你知道'setProjection(Projections.property(「valueEmpId」))'做了什麼嗎? – Tom

+0

閱讀你想要在對象中投入整數的錯誤。 – F0XS

+0

@Tom我已經把這些標準API相關的代碼。如果我理解正確,'setProjection(Projections.property(「valueEmpId」))''等同於'SELECT VALUE_EMP_ID FROM ....'。你在那裏看到錯誤嗎?控制檯中的Hibernate查詢似乎正在產生我正在尋找的東西。 – Dan

回答

2

你的查詢只返回 「this_.VALUE_EMP_ID」 int值。

如果你想返回EmployeeTopMetaData,你必須改變你的查詢:

Hibernate: 
    select 
     this_ 
    from 
     EMPLOYEE_TOP_METADATA this_ 
    where 
     this_.TESTING_ID=? 
     and this_.COMPANY_EMP_ID=? 

但我建議,如果你只需要VALUE_EMP_ID,最好是隻改變變量。

  Integer empMetaData = 
       (Integer) session.createCriteria(EmployeeTopMetaData.class) // This is the line #50 
       .setProjection(Projections.property("valueEmpId")) 
       .add(Restrictions.eq("testingId", 1234)) 
       .add(Restrictions.eq("company_employee_id", 3345)) 
       .uniqueResult(); 
相關問題