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);
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);