【问题标题】:class cast exception in hibernate休眠中的类转换异常
【发布时间】:2015-08-15 17:36:34
【问题描述】:

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 系统。 线程“主”java.lang.ClassCastException 中的异常:java.lang.Long 无法转换为 com.saurabh.MisRecords 在 com.saurabh.Test.main(Test.java:17)

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

【问题讨论】:

  • 查看this链接..它可能会帮助您解决问题..

标签: java hibernate classcastexception


【解决方案1】:

您的查询返回了很长的结果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();
}

【讨论】:

  • 我想看看有多少条记录而不是选择所有记录
  • 那么您不应该对其进行以下操作:List&lt;MisRecords&gt; list=query.list(); 如您所知,查询的结果是 Long 而不是 MisRecords。
  • 您可以执行 query.iterate() 并在 Long 变量中获取第一个结果。
  • int a=( (Long) session.createQuery("select count(*) from MisRecords where empReportingManagerId=1").iterate().next() ).intValue(); ,我找到了这个解决方案,但是我在这里对 id 进行硬编码,我如何从扫描仪中提供价值
  • 它是正确的,但是这个答案 Query query=session.createQuery("select count(*)from MisRecords where empReportingManagerId=:i"); Long recordCount = (Long) query.uniqueResult();效率更高,我会支持你的答案,但是。
【解决方案2】:

如果您想从实体中检索所有使用的实体或从实体 e 中选择 e,您的查询会很长,因为您正在使用选择计数。

【讨论】:

    【解决方案3】:

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

    【讨论】:

    • int a=( (Long) session.createQuery("select count(*) from MisRecords where empReportingManagerId=1").iterate().next() ).intValue(); ,我找到了这个解决方案,但是我在这里对 id 进行硬编码,我如何从扫描仪中提供价值
    • 您可以在查询中使用直接变量名。像这样 - int a=( (Long) session.createQuery("select count(*) from MisRecords where empReportingManagerId="+VARIABLE_NAME).iterate().next() ).intValue();
    【解决方案4】:

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

    我想查看有多少条记录而不是选择所有记录

    使用下面的代码sn-p,

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

    【讨论】:

      【解决方案5】:

      我觉得它更适合你

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

      【讨论】:

        猜你喜欢
        • 2016-08-05
        • 1970-01-01
        • 2014-06-09
        • 1970-01-01
        • 2014-07-12
        • 2011-02-14
        • 2011-09-25
        • 2012-12-27
        • 1970-01-01
        相关资源
        最近更新 更多