hibernate中的类强制转换异常

时间:2015-06-02 04:35:17

标签: java hibernate classcastexception

Test.java

public static void main(String[] args) {
    System.out.println("Enter reporting manager empid");
    Scanner sc = new Scanner(System.in);
    Integer in = sc.nextInt();
Session session=new  AnnotationConfiguration().configure().buildSessionFactory().openSession();
 Query query=session.createQuery("select count(*)from MisRecords where empReportingManagerId=:i");
 query.setParameter("i", in);
    List<MisRecords> list=query.list();{
    for(MisRecords employee:list){
        //  System.out.println(employee.getFirstName());
        //  System.out.println(employee.getLastName());
         // System.out.println(employee.getEmpId());
          System.out.println(employee.getFirstName()+" "+ employee.getEmpId()+ " "+employee.getEmpReportingManagerId());

     }
MisRecords.java

@Entity
@Table(name="dat_emprecords")
public class MisRecords {
@Id
@GeneratedValue
@Column(name="pk_EmpRec_Idx")
    int id;

    @Column(name="EmpRec_EmpFName")
    String firstName;
    @Column(name="EmpRec_EmpLName")
    String lastName;
    @Column(name="fk_EmpRec_EmpID")
    int empId;
    @Column(name="fk_emprec_empreportingmgrid")
    int empReportingManagerId;

//输出     输入报告管理器empid     1     log4j:WARN找不到logger(org.hibernate.cfg.annotations.Version)的appender。     log4j:WARN请正确初始化log4j系统。     线程&#34; main&#34;中的例外情况java.lang.ClassCastException:java.lang.Long无法强制转换为com.saurabh.MisRecords         在com.saurabh.Test.main(Test.java:17)

当我试图跑步时,我得到这个classCastException,不知道为什么? 请帮忙。提前谢谢。

5 个答案:

答案 0 :(得分:3)

您的查询返回的count结果很长。请做:

select * from MisRecords where empReportingManagerId=:i

的插入内容

select count(*)from MisRecords where empReportingManagerId=:i从查询中获取结果。

如果您想要计数,可以执行以下操作:

Query query=session.createQuery("select count(*)from MisRecords where empReportingManagerId=:i");
query.setParameter("i", in);
Iterator itr =query.iterator();
int i = 0;
if(itr.hasNext()){
    i = itr.next().intValue();
}

答案 1 :(得分:3)

如果你想要从实体中检索所有实体或从实体e中选择e,那么你的查询得到了很长时间,因为你正在使用选择计数

答案 2 :(得分:3)

您在查询中使用了count(*)。这就是为什么它会给结果带来长期价值。如果你只想获得计数,那么你可以执行查询,然后执行query.iterate()并获取长变量中的第一个结果。

答案 3 :(得分:2)

正如您在评论中提到的,我发现您正在尝试查看记录计数,

  

我想知道有多少记录可以选择所有记录

对于在代码段下面的用法,

Query query=session.createQuery("select count(*)from MisRecords where empReportingManagerId=:i");
Long recordCount = (Long) query.uniqueResult();

答案 4 :(得分:0)

我认为对你来说更好。

&#13;
&#13;
Long value=hibernateTemplate.find(""select count(*)from MisRecords where empReportingManagerId=?,i);
&#13;
&#13;
&#13;