【问题标题】:Cast list<Object> to an ArrayList将 list<Object> 转换为 ArrayList
【发布时间】:2013-12-05 19:25:51
【问题描述】:

我有一个错误转换。

我的控制台的错误是:

java.lang.ClassCastException: [Ljava.lang.Object;无法转换为 modelAjax.ModeloAjax

我的代码是:

DAO

public List<ModeloAjax> findByMarca(Long marca) {

    Session s = sf.getCurrentSession();

    Query q = s.createQuery("select id, nombre from "+getEntityName()+" where marca_id="+marca);

    List<?>modelos = q.list();

    List<ModeloAjax> result = new ArrayList<ModeloAjax>(modelos.size());

    for(Object o : modelos){
        result.add((ModeloAjax) o);
    }




    return result;
}

我可以做些什么来修复错误?

【问题讨论】:

  • 您正在尝试在 HQL createQuery 方法中编写 sql 查询,这在第一步中是错误的。使用下面给出的答案。

标签: java hibernate list arraylist casting


【解决方案1】:
Query q = s.createQuery("select id, nombre from "+getEntityName()+" where marca_id="+marca).addEntity(ModeloAjax.class);

将返回 ModeloAjax 对象列表中的 db 值。

【讨论】:

    【解决方案2】:

    您正在将 Object[] 转换为 ModeloAjax。该数组包含 id 和 nombre 2 项。

    你需要这样编码:

    Query q = s.createQuery("select e from " + getEntityName() + " e where e.marca_id = " + marca);
    

    注意:您希望保留您的查询。你必须这样做:

    for(Object o : modelos ) {
        Object[] record = (Object[])o;
        // record[0] = id
        // record[1] = nombre
    
        // Convert record to ModeloAjax
    }
    

    【讨论】:

    • 我不明白,可能更具体?我需要返回 POJO (ModeloAjax),而不是实体
    • 因为您编写了“select id, nombre from”,所以 modelos 是 Object[] 的列表,而不是 ModeloAjax 的列表。如果你想要它是 ModeloAjax 列表,你必须使用我的代码'select e from ..."
    • 如果你想要 POJO (ModeloAjax),而不是实体。您必须将 Object[] 转换为 ModeloAjax。例如:new ModeloAjax(record[0], record[1])
    猜你喜欢
    • 1970-01-01
    • 2014-05-09
    • 2012-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多