Erro no Hibernate

Bom…estou com o seguinte problema no hibernate pois minha aplicação apresenta o seguinte erro:

java.lang.IndexOutOfBoundsException: Remember that ordinal parameters are 1-based!

Meu código está assim:

public Usuario getUsuarioParams(String nome, int codigo){ return (Usuario) getPojoParams("from Usuario usr where usr.idUsuario = ?1 and usr.nome = ?2", codigo,nome); }

[code]public Serializable getPojoParams(String query, Object… params){
Session ses = getSession();
Query qr = ses.createQuery(query);

    for(int i = 1; i <= params.length; i++){
        qr.setParameter(i, params[i - 1]);
    }
    Object toReturn = qr.uniqueResult();
    
    ses.getTransaction().commit();
    ses.close();
    return (Serializable) toReturn;
}[/code]

Desde já agradeço a atenção.

Adonias, vc verificou o tamanho dos parâmetros? Talvez tenha mais parâmetros que o esperado, aí vai quebrar dentro do “for”. Se tiver ao menos um parâmetro a mais, “qr.setParameter(i, params[i - 1]);” vai tentar setar um valor para i = 3, que não tem na sua query.

Dá uma olhada nestes parâmetros aí.

Companheiro verifiquei os paramêtros e eles estão corretos, o metódo tá recebendo dois parametros que são o idUsuario e o nome, enquanto que o params.length está retornando 2 o que de fato impossibilita o for de quebrar em um valor acima da quantidade de parametros passados, este problema é muito estranho pois aparentemente está tudo certo.

Um detalhe interessante é que quando utilizo a consulta com um parametro apenas modificando a representação dele em SQL de ?1 para somente ? ele funciona entretanto quando adciono um segundo parametro como ?1, ele já apresenta erro, conforme mostrado no codigo abaixo onde quando executo funciona normal.

public Usuario getUsuarioParams(int codigo){ return (Usuario) getPojoParams("from Usuario usr where usr.idUsuario = ?", codigo); }

[code]public Serializable getPojoParams(String query, Object… params){
Session ses = getSession();
Query qr = ses.createQuery(query);

    for(int i = 1; i <= params.length; i++){
        qr.setParameter(i - 1, params[i - 1]);
    }
    Object toReturn = qr.uniqueResult();
    
    ses.getTransaction().commit();
    ses.close();
    return (Serializable) toReturn;
}[/code]

Esse código funciona normal, porém esse logo abaixo não ele dá o erro que reportei acima:

public Usuario getUsuarioParams(int codigo){ return (Usuario) getPojoParams("from Usuario usr where usr.idUsuario = ?1", codigo); }

[code]public Serializable getPojoParams(String query, Object… params){
Session ses = getSession();
Query qr = ses.createQuery(query);

    for(int i = 1; i <= params.length; i++){
        qr.setParameter(i, params[i - 1]);
    }
    Object toReturn = qr.uniqueResult();
    
    ses.getTransaction().commit();
    ses.close();
    return (Serializable) toReturn;
}[/code]

Fala!

Cara, segundo a documentação do Hibernate (o link segue no final), o setParameter começa do zero. Então, tenta usar só ‘?’, sem os números, e fazer o for assim, da forma que vc já tinha tentado:

for(int i = 1; i <= params.length; i++){ qr.setParameter(i - 1, params[i - 1]); }

https://www.hibernate.org/hib_docs/v3/api/org/hibernate/Query.html#setParameter(int,%20java.lang.Object)

Value!

Companheiro obrigado, realmente funcionou na verdade esse negócio de ?1, ?2 não existe basta apenas o ? que o hibernate através do setParameter onde determina-se a posição do parametro ele associa a string sql, blz! Nesse caso o código fica assim:

public Usuario getUsuarioParams(String nome, int codigo){ return (Usuario) getPojoParams("from Usuario usr where usr.idUsuario = ? and usr.nome = ?", codigo,nome); }

[code]public Serializable getPojoParams(String query, Object… params){
Session ses = getSession();
Query qr = ses.createQuery(query);

    for(int i = 1; i <= params.length; i++){
        qr.setParameter(i - 1, params[i - 1]);
    }
    Object toReturn = qr.uniqueResult();
    
    ses.getTransaction().commit();
    ses.close();
    return (Serializable) toReturn;
}[/code]

valew!