2017-10-04 18 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

IntegerをObjectにキャストしようとしているエラーを読んでください。 – 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(); 
関連する問題