2014-12-03 3 views
7

Я хочу запрос две таблицы в спящем режиме. таблица 3 (пользователь - роль - профиль) в пользовательском Entity. запрос с HQL:java.lang.ClassCastException: [Ljava.lang.Object; не может быть передан сущности.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'"; 

и запустить запрос:

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

класс userentity: этот класс geteer и 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; 

спящий режим картографирования для 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> 

и класс HibernateUtil для создания 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

Он вернет вам список , который будет содержать ваши данные. Если вы хотите, чтобы UserEntity возвращался, просто используйте «select ue» из UserEntity ue, RoleEntity возвратите все свойства, где ue.roleEntity.roleId = re.roleId и ue.username = 'reza' и ue.password = '123456' " – mprabhat

+0

Почему вы улавливаете исключение HibernateException и не делаете ничего, кроме того, что бросаете DaoException, которое перебрасывает вызывающее исключение? 'catch (HibernateException e) { try { throw new DaoException (" Исключение фетального в ", e); } catch (DaoException e1) { e1.printStackTrace(); } } ' – Sal

+0

привет mprabhat. Мне нужна вся таблица данных для роли и пользователя. –

ответ

12

Поскольку вы используете проекцию множественного выбора, вы фактически забирающий массив объектов, так что вам необходимо изменить логику обработки результата запроса к:

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

for(Object[] tuple : tuples) { 
    UserEntity ue = tuple[0]; 
    Number roleId = tuple[1]; 
} 
Смежные вопросы