【问题标题】:java.lang.ClassCastException: java.lang.Integer cannot be cast to abc.def.myproject.orm.EmployeeTopMetaDatajava.lang.ClassCastException:java.lang.Integer 无法转换为 abc.def.myproject.orm.EmployeeTopMetaData
【发布时间】:2018-03-16 00:57:20
【问题描述】:

我正在尝试使用下面代码中定义的 Hibernate Criteria API 运行 SELECT 查询。我检查了控制台,似乎 查询运行良好。这是我在控制台中获得的 SQL 查询:

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

但就在控制台中的上述 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;

}

【问题讨论】:

  • 这是你的代码吗?你知道setProjection(Projections.property("valueEmpId")) 是做什么的吗?
  • 阅读您尝试在 Object 中转换 Integer 的错误。
  • @Tom 我已经把那些标准 API 相关的代码。如果我理解正确, setProjection(Projections.property("valueEmpId")) 相当于 SELECT VALUE_EMP_ID FROM .... 。你看里面有什么不对吗?控制台中的 Hibernate 查询似乎正在产生我正在寻找的内容。
  • @FoxCy 如何在我的场景中修复它?
  • 好吧,你明白它的作用,但我不明白的是,你仍然不知道问题是什么。您期望查询中的整数,但您尝试将其转换为 EmployeeTopMetaData 并且异常告诉您这不起作用....再次,这里有什么不清楚?跨度>

标签: java hibernate hibernate-4.x


【解决方案1】:

您的查询仅返回“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();

【讨论】:

    猜你喜欢
    • 2020-07-22
    • 1970-01-01
    • 2019-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-20
    • 1970-01-01
    相关资源
    最近更新 更多