2014-12-03 35 views
7

voglio la query due table in hibernate. tabella featch 3 (Utente - Ruolo - Profilo) nell'entità utente. query con HQL:java.lang.ClassCastException: [Ljava.lang.Object; non può essere castato in entity.UserEntity

query= "select ue, ue.roleEntity.roleId from UserEntity ue ,RoleEntity re fetch all properties where ue.roleEntity.roleId=re.roleId and ue.username ='reza' and ue.password='123456'"; 

ed eseguire query:

try { 
     sessionFactory = HibernateUtil.getSessionFactory(); 
     session = sessionFactory.getCurrentSession(); 
     transaction = session.beginTransaction(); 
     userEntityList = (List<UserEntity>) session.createQuery(query).list(); 
     transaction.commit(); 
    } catch (HibernateException e) { 
     try { 
      throw new DaoException("Fetal exception in", e); 
     } catch (DaoException e1) { 
      e1.printStackTrace(); 
     } 
    } 

classe userentity: questa classe è geteer e seter:

public class UserEntity { 
private int userId; 
private long personalCode; 
private String username; 
private String password; 
private short active; 
private String question; 
private String passive; 
private ProfileEntity profileEntity; 
private RoleEntity roleEntity; 

hibernate Maping per userEntity.hbm.xml

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

    <hibernate-mapping package="entity"> 
     <class name="UserEntity" table="TABLE_USER"> 
      <id name="userId" type="java.lang.Integer" column="USER_ID"> 
       <generator class="increment" /> 
      </id> 

      <property name="personalCode" type="java.lang.Long" column="PERSONALCODE"> 

      </property> 

      <property name="username" type="java.lang.String" column="USERNAME"> 

      </property> 

      <property name="password" type="java.lang.String" column="PASSWORD"> 

      </property> 

      <property name="active" type="java.lang.Short" column="ACTIVE"> 

      </property> 

      <property name="question" type="java.lang.String" column="QUCTION"> 

      </property> 

      <property name="passive" type="java.lang.String" column="PASSIVE"> 

      </property> 


      <many-to-one name="roleEntity" class="entity.RoleEntity" column="ROLE_ID" cascade="none" fetch="select" /> 
      <many-to-one name="profileEntity" class="ProfileEntity" cascade="delete" column="profile_id"/> 

    </class> 
</hibernate-mapping> 

e categoria HibernateUtil per creare sesstion:

import org.hibernate.SessionFactory; 
    import org.hibernate.boot.registry.StandardServiceRegistryBuilder; 
    import org.hibernate.cfg.Configuration; 

    public class HibernateUtil { 
     private static SessionFactory sessionFactory; 

     static { 
      try { 
       Configuration configuration = new Configuration().configure(); 
       StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()); 
       sessionFactory = configuration.buildSessionFactory(builder.build()); 
      } catch (Throwable th) { 

       System.err.println("Enitial SessionFactory creation failed" + th); 

       throw new ExceptionInInitializerError(th); 

      } 

     } 

     /** 
     * @return 
     */ 
     public static SessionFactory getSessionFactory() { 

      return sessionFactory; 

     } 
    } 
+0

Ti verrà restituita una lista che immetterà i tuoi dati. Se vuoi che venga restituito UserEntity, usa "seleziona ue da UserEntity ue, RoleEntity recupera tutte le proprietà dove ue.roleEntity.roleId = re.roleId e ue.username = 'reza' e ue.password = '123456'" – mprabhat

+0

Perché prendi una HibernateException e non fai altro che lanciare un'eccezione Dao che riattiva l'eccezione che causa? 'catch (HibernateException e) { try { throw new DaoException (" Eccezione fetale in ", e); } catch (DaoException e1) { e1.printStackTrace(); } } – Sal

+0

ciao mprabhat. Voglio che tutta la tabella di dati per il ruolo e l'utente ottengano. –

risposta

12

Poiché si utilizza un risalto selezione multipla, in realtà il recupero un array di oggetti, quindi è necessario cambiare la logica di elaborazione risultato query:

List<Object[]> tuples = (List<Object[]>) session.createQuery(query).list(); 

for(Object[] tuple : tuples) { 
    UserEntity ue = tuple[0]; 
    Number roleId = tuple[1]; 
}