Java.lang.ClassCastException: [Ljava.lang.Object; cannot pass to entity.UserEntity

I want to query two tables in sleep mode. Table 3 (User - Role - Profile) in User Entity. query with hql:

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

and execute the request:

  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 class: this class is geteer and 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; 

sleep mode for 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> 

and the hibernateutil class to create 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; } } 
+7
java java-ee orm hibernate hql
source share
1 answer

Since you are using multiscreen projection, you are actually retrieving an array of objects, so you need to change the logic for processing the query results:

 List<Object[]> tuples = (List<Object[]>) session.createQuery(query).list(); for(Object[] tuple : tuples) { UserEntity ue = tuple[0]; Number roleId = tuple[1]; } 
+12
source share

All Articles