2013-05-07 3 views
1

У меня возникла проблема с повторным списком, который был подготовлен из HQL. Я запрашиваю DB на одной таблице, сопоставленной с очень простым классом.ClassCastException даже после литья типов

После итерации того же списка и типа литья в тот же класс во время итерации я получаю ClassCastException.

Код:

import HectorRequest; 
import EDIMigrateData; 

SessionFactory factory = HibernateUtil.getSessionFactory(); 
Session session = factory.getCurrentSession(); 
Transaction tx = session.beginTransaction(); 
Query qry = session.createQuery("select hr from HectorRequest hr"); 

List result = qry.list(); 
for (Iterator it = result.iterator(); it.hasNext();) { 
    Object o = it.next(); 
    if(o instanceof HectorRequest){ 
     HectorRequest h = (HectorRequest) o; 
     System.out.println("ID: " + h.getId()); 
    } 
} 

Интересно здесь Если я типажей к тому же классу он дает ClassCastException.

if(o instanceof HectorRequest) { 
    HectorRequest h = (HectorRequest) o; 
    System.out.println("ID: " + h.getId()); 
} 

Элемент управления не входит в вышеуказанный оператор if. Если я удалю выше IF условие он бросает

java.lang.ClassCastException: HectorRequest 

Ниже мой спящий режим отображения XML для HectorRequest класса.

Ниже мой hibernate.cfg.xml

?xml version="1.0" encoding="utf-8"?><!DOCTYPE hibernate-configuration PUBLIC"-//Hibernate/Hibernate Configuration DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"><hibernate-configuration><session-factory><property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property><property name="hibernate.connection.url">jdbc:oracle:thin:@//apludc01clu20-scan-oravip.dci.bt.com:61901/C2BM2_ANY</property><property name="hibernate.connection.username">s3</property><property name="hibernate.connection.password">**</property><property name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property><property name="hibernate.default_schema">s3</property><property name="show_sql">true</property><property name="hibernate.current_session_context_class">thread</property><mapping resource="resources/config/hector_request.hbm.xml"></mapping></session-factory></hibernate-configuration> 

Ниже выход:

Hibernate: select hectorrequ0_.ID as ID0_, hectorrequ0_.ROUTER_TEL as ROUTER2_0_, hectorrequ0_.FLAGVALUE as FLAGVALUE0_, hectorrequ0_.FLAGPOS as FLAGPOS0_, hectorrequ0_.ACCOUNTNO as ACCOUNTNO0_, hectorrequ0_.CUSTOMERIDENTITY as CUSTOMER6_0_, hectorrequ0_.CRMSOURCE as CRMSOURCE0_, hectorrequ0_.DATASOURCE as DATASOURCE0_ from s3.hector_request hectorrequ0_ 

java.lang.ClassCastException: HectorRequest 

at NotifyMain1.main(NotifyMain1.java:37) 

Может кто-то помочь, что не хватает, и здесь не так.

ответ

0

Это из-за данных, возвращаемых запросом «select hr from HectorRequest hr» не является «HectorRequest». Вероятно, это тип данных базы данных (строка, число, дата, время и т. Д.). Таким образом, вы должны создать свой объект «HectorRequest», используя данные, возвращаемые запросом, а не напрямую назначать ему приведение.

 Смежные вопросы

  • Нет связанных вопросов^_^