2012-05-25 7 views
1

매핑 클래스에 결과 집합을 캐스팅하려고 할 때 최대 절전 모드에서 클래스 캐스트 예외가 발생했습니다 ... 반환 된 결과 집합의 데이터를 볼 수 있습니다. 다시 Object []로하고 Object []를 List로 설정할 수 있습니다 ... 최대 절전 모드 매핑을 올바르게 수행하고 있습니까? 나는최대 절전 클래스 캐스트 예외

매핑 클래스

@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<EQP_UT> 

      session.getTransaction().commit(); 

      return 10;  
     } 
     catch(HibernateException ex) 
     { 
      ex.printStackTrace(); 
      transaction.rollback(); 

     } 
     catch(Exception ex) 
     { 
      System.err.println(ex.getMessage()); 
     } 

     return -1; 
    } 
} 

가입 맵 클래스

<?xml version='1.0' encoding='utf-8'?> 
<!DOCTYPE hibernate-configuration PUBLIC 
"-//Hibernate/Hibernate Configuration DTD//EN" 
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> 

<hibernate-configuration> 
    <session-factory> 
     <property name="hibernate.connection.driver_class">com.ibm.db2.jcc.DB2Driver</property> 
     <property name="hibernate.connection.url">jdbc:db2://****</property> 
     <property name="hibernate.connection.username">*****</property> 
     <property name="hibernate.connection.password">*****</property> 
     <property name="hibernate.connection.pool_size">1</property> 
     <property name="show_sql">true</property> 
     <property name="hbm2ddl.auto">NONE</property> 
     <property name="dialect">org.hibernate.dialect.DB2Dialect</property> 
     <property name="hibernate.cache.provider_class">org.hibernate.cache.NoCacheProvider</property> 
     <property name="hibernate.current_session_context_class">thread</property> 
     <mapping package="db2"/> 
     <mapping class="db2.EQP_UT"/> 
     <mapping class="db2.EQP_COMP_PRIMARY"/> 
    </session-factory> 
</hibernate-configuration> 

... 다시 올바른 데이터를 쿼리하지만 올바르게 매핑하지 얻을

@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; 
} 

메인 I 클래스 캐스트 예외를 생산하고 문 주위에 시도 - 캐치 조항을 넣어 당신을 추천 시험을위한

//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<EQP_UT> 
} 
//tons more code... 

답변

1

는 catch 블록에서 중단 점을 설정 i-th 요소가 실제로 어떤 클래스인지 봅니다.

당신은 HQL SELECT 문을 사용하고 있습니다 : 문제에

. 이 명령.이있는 조회는 목록을 리턴하지만 목록 요소는 반드시 EQP_TU의 인스턴스가 아 U니다. 그들은 또한 객체 배열 일 수 있습니다. 당신을 위해

솔루션 :

대신 SELECT 문의 FROM 문을 사용합니다. 당신의 코드에서 :

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

그런 다음 당신은 당신이 (당신의 코드에서 EQP_UT) FROM 다음에 언급 한 클래스의 인스턴스 목록을 받아보실 수 있습니다.

+0

응답 해 주셔서 감사합니다. 엔티티를 인스턴스화 할 수 없습니다. db2.EQP_UT – JonH

+0

EQP_UT의 생성자에서 EQP_UT의 생성자를 호출하기 위해 최대 절전 모드로 설정하는 쿼리를 실행하는 retrieve()를 호출합니다. ... 작동하지 않습니다. – Johanna

관련 문제