Hibernate类强制转换exception

在尝试将结果集转换为映射类时,我正在使用hibernate获取类强制转换exception…我能够看到返回的结果集中的数据…但是它以Object []的forms返回我能够将Object []设置为一个List …我正在做我的hibernate映射吗? 我从查询中获取了正确的数据,但它没有正确映射…

制图

    com.ibm.db2.jcc.DB2Driver jdbc:db2://**** ***** ***** 1 true NONE org.hibernate.dialect.DB2Dialect org.hibernate.cache.NoCacheProvider thread      

映射类

 @Entity @Table(name = "EQP_UT") public class EQP_UT implements Serializable { @Id private String INITIAL; @Id private String NUMBER; private Integer AXL_CNT; private String EQP_TYP_CD; private String EIN; private Integer TRUK_CNT; @OneToOne @JoinTable(name = "EQP_COMP_PRIMARY", joinColumns = {@JoinColumn(name = "INITIAL"), @JoinColumn(name = "NUMBER")}, inverseJoinColumns = { @JoinColumn(name = "INITIAL"), @JoinColumn(name="NUMBER") } ) public EQP_COMP_PRIMARY eqp_comp; public EQP_UT(){ this.INITIAL = ""; this.NUMBER = " "; int a = this.retrieve(); System.out.println("This is the data is here..." + a); } public String getNumber() { return NUMBER; } public void setNumber(String num) { this.NUMBER = num; } public String getInitial() { return INITIAL; } public void setInitial(String init) { this.INITIAL = init; } public int retrieve() { Session session = null; Transaction transaction = null; try{ session = HibernateUtil.getDB2SessionFactory().getCurrentSession(); transaction = session.beginTransaction(); String init = "AARE"; String number = String.format("%010d", 9350); Integer num = Integer.parseInt(number); String queryString = "SELECT A.INITIAL, A.NUMBER, " + "A.TRUK_CNT, A.EQP_TYP_CD, A.AXL_CNT, " + "B.TRUK_AXL_CNT, A.EIN FROM EQP_UT AS A " + "LEFT JOIN A.eqp_comp AS B " + "WHERE A.INITIAL||A.NUMBER IN (:carList) AND A.INITIAL IN (:initList) AND A.NUMBER IN (:numberList) " + "AND B.TRUK_AXL_CNT > 0"; Query query = session.createQuery(queryString); query.setParameterList("carList", Globals.returnCarList()); query.setParameterList("initList", Globals.returnCarListCarInits()); query.setParameterList("numberList", Globals.returnCarListCarNumbers()); @SuppressWarnings("unchecked") List obj = query.list(); System.err.println("CLASS NAME IS " + obj.get(0).getClass().getClass().getName()); Globals.eqpList = obj; //Globals.eqpList is List session.getTransaction().commit(); return 10; } catch(HibernateException ex) { ex.printStackTrace(); transaction.rollback(); } catch(Exception ex) { System.err.println(ex.getMessage()); } return -1; } } 

加入class级

 @Entity @Table(name = "EQP_COMP_PRIMARY") public class EQP_COMP_PRIMARY implements Serializable{ private Integer TRUK_AXL_CNT; @Id private String INITIAL; @Id private String NUMBER; } 

主要

 //tons more code... for(int i = 0; i < Globals.eqpList.size(); i++) { EQP_UT e = Globals.eqpList.get(i); //class cast exception - and Globals.eqpList is List } //tons more code... 

对于测试,我建议你在产生类强制转换exception的语句周围放置一个try-catch子句,在catch块中设置一个断点,然后查看第i个元素到底是哪个类。

对你的问题:

您正在使用HQL SELECT语句。 使用此语句的查询返回一个列表,但列表的元素不一定是EQP_TU的实例; 它们也可以是一个对象数组。

解决方案:

使用FROM语句而不是SELECT语句。 在你的代码中:

 String queryString = "FROM EQP_UT AS A " + "LEFT JOIN A.eqp_comp AS B " + "WHERE A.INITIAL||A.NUMBER IN (:carList) AND A.INITIAL IN (:initList) AND A.NUMBER IN (:numberList) " + "AND B.TRUK_AXL_CNT > 0"; 

然后,您可以确保获得一个列表,其中包含您在FROM之后提到的类的实例(代码中的EQP_UT)。