cris2
#1
Olá pessoal,
Ao executar meu método, está occorendo o seguinte: java.lang.IndexOutOfBoundsException: Remember that ordinal parameters are 1-based!
public static List<DominioValor> findDomainValuesByDomainName(SessionImplementor session, String domainName, Boolean onlyActive, boolean sortValues) {
Validate.notNull(session, "session não pode ser null");
StringBuffer hql = new StringBuffer(defaultHQL);
if (sortValues) {
hql.append(" order by dv.ordem");
}
Query query = ((AbstractSessionImpl)session).createQuery(hql.toString());
query.setCacheable(true);
query.setCacheRegion(CACHE_DOMAIN_VALUES_REGION_NAME);
query.setParameter("domainName", domainName);
if (onlyActive != null) {
hql.append(" and dv.ativo=?");
[b]query.setParameter(1, onlyActive); //O erro ocorre aqui[/b]
}
return query.list();
}
Estou setando o parametro de forma errada? :roll:
Obrigada!
O comando createQuery em
Query query = ((AbstractSessionImpl)session).createQuery(hql.toString());
compilará a tua query a partir da String, e a deixará preparada.
O
hql.append(" and dv.ativo=?");
só adiciona essa String ao final da anterior, mas não mudará em nada a query. Ela já está estática e imutável.
Já que não muda,
query.setParameter(1, onlyActive);
não vai adiantar, pois não há parâmetros a serem preenchidos.
A solução é adicionar a String antes desta ser compilada, e preencher os parâmetros depois.
public static List<DominioValor> findDomainValuesByDomainName(SessionImplementor session, String domainName, Boolean onlyActive, boolean sortValues) {
Validate.notNull(session, "session não pode ser null");
StringBuffer hql = new StringBuffer(defaultHQL);
if (onlyActive != null) {
hql.append(" and dv.ativo=?");
}
if (sortValues) {
hql.append(" order by dv.ordem");
}
Query query = ((AbstractSessionImpl)session).createQuery(hql.toString());
query.setCacheable(true);
query.setCacheRegion(CACHE_DOMAIN_VALUES_REGION_NAME);
query.setParameter("domainName", domainName);
if (onlyActive != null) {
query.setParameter(1, onlyActive);
}
return query.list();
}
cris2
#3
Olá renrutal !
Muito obrigada pela explicação!
Funcionou direitinho! 