class 在休眠中抛出异常

class cast exception in hibernate

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 找不到记录器的附加程序 (org.hibernate.cfg.annotations.Version)。 log4j:WARN请正确初始化log4j系统。 线程 "main" java.lang.ClassCastException 中的异常:java.lang.Long 无法转换为 com.saurabh.MisRecords 在 com.saurabh.Test.main(Test.java:17)

当我尝试 运行 时,我得到了这个 classCastException,不知道为什么? 请帮忙。提前致谢。

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

如果您想从实体中检索所有使用的实体或从实体 e

中检索所有实体,因为您正在使用 select 计数,因此您的查询很长

您在查询中使用了 count(*)。这就是为什么它将结果作为一个长值。如果你只想得到计数,那么你可以执行查询,然后执行 query.iterate() 并将第一个结果放入 long 变量中。

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

i want to see how many records are there instead to select all records

为此使用下面的代码片段,

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

我认为它对你更好

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