java.lang.ClassCastException : [Ljava. lang.Object;不能转换为 entity.UserEntity

标签 java hibernate jakarta-ee orm hql

我想在 hibernate 状态下查询两个表。 用户实体中的 featch 3 表(用户角色配置文件)。 用 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'";

并运行查询:

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

用户实体类: 这个类是 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 的 hibernate 映射

        <?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>

和用于创建 session 的 hibernateutil 类:

  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;

        }
    }

最佳答案

因为你使用的是多选投影,实际上是取一个对象数组,所以需要将查询结果处理逻辑改成:

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

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

关于java.lang.ClassCastException : [Ljava. lang.Object;不能转换为 entity.UserEntity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27280818/

相关文章:

java - 删除除字符串最后一部分之外的所有内容?

从 catch block 的结果调用具有通用参数的 Java 方法

java - Mockito 可以模拟包级可见性接口(interface)吗?

java - spring-hibernate-jpa namedNativeQuery 中的列名无效

java - 如何避免每五秒建立一个新连接?

java - 将多个网页的抓取数据合并到单个页面中

java - Hibernate 的 Transformers.aliasToBean() 方法

mysql - Hibernate和哪个数据库?

java - JBoss 服务器上的 Cobertura 运行时覆盖范围

java - 运行 Java Web 应用程序时出现 SQLException