当前位置: 首页 > 面试题库 >

java.lang.ClassCastException:[Ljava.lang.Object; 无法转换为entity.UserEntity

万俟棋
2023-03-14
问题内容

我想在休眠状态查询两个表。用户实体中的featch 3表(User-Role-Profile)。用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();
        }
    }

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创建会话:

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


 类似资料:
  • 问题内容: 我需要将HashMap转换为String数组,以下是我的Java代码 当我运行代码时,得到以下内容。 问题答案: 返回,而不管泛型。您可以改用重载的变体: 另外,由于的方法不能保证顺序,并且您使用数组进行的所有操作都会打印出值,因此可以直接迭代: 编辑:只是为了完成图片,在Java 8中,该方法可用于使代码更加优雅:

  • 问题内容: 我正在运行以下查询。它显示一条错误消息。如何解决这个错误? 错误是: 问题答案: 您可以这样写: 已经是一个字符串列表,因为您只选择了一列。 此外,正如Thilo的答案所暗示的那样,您可以将结果直接转换为a 而不是使用。

  • 问题内容: 我想在hibernate状态查询两个表。用户实体中的featch 3表(User-Role-Profile)。用hql查询: 并运行查询: userentity类:此类是geteer和seter: userEntity.hbm.xml的hibernate映射 和类hibernateutil创建会话: 问题答案: 由于使用的是多选投影,因此实际上是在获取对象数组,因此需要将查询结果处理逻

  • 问题内容: 码: CrbtSubMasterDemo 与数据库一起映射。当我尝试运行它时,它显示以下异常: 问题是query.list()返回pojo类的对象列表。那为什么是这个异常。我是Hibernate的新手,很抱歉这是一个愚蠢的问题。 问题答案: 先生,许多用户都面临这种需求。Hibernate具有ResultTransformer来在Object中转换hql / sql。 它将您查询转换为

  • 问题内容: 我已经编写了一个通用类,下面是该类的构造函数。我想像这样写 由于我不知道运行时的泛型类型,因此它将引发异常。 有什么办法解决这些问题?E的声明是 这就是我要打电话的方式 更新 家伙,谢谢您的帮助。我在搞泛型,所以问题就被创建了。这是所有导致问题的代码- 更新2 :似乎除了传递下面的答案中提到的类类型外,我们无法做到这一点。 问题答案: 这是重现异常所需的最最少的代码。 Java泛型使用