Hibernate 3 e NamedQueries

Boa tarde, pessoal…

Eu precisaria de uma namedquery que me definisse uma busca por vários campos, como descrito:

            <query name="buscaPorCodFuncIndiceTipoTipoProg">
                <![CDATA[from Autorizacao aut where aut.codFunc = :codFunc and aut.indice = :indice and aut.tipo = :tipo and aut.tipoprog = :tipoprog]]>
            </query>

Porém, no momento de definir o comando:

retorno = (Autorizacao) sessao.getNamedQuery(buscaPorCodFuncIndiceTipoTipoProg).setParameter( (String) paramChave[0], paramChave[1], paramChave[2], paramChave[3]).uniqueResult();

o setParameter possui uma limitação do número de parâmetros que eu posso passar…

Como contornar esse problema?

[]s
Rafael

Leia a documentação, não é assim que se usa setParameter() -> http://www.hibernate.org/hib_docs/reference/en/html/objectstate.html#objectstate-querying-executing-named

O método setParameter não recebe todos os parâmetros que vão ser utilizados.
Se você quer passar múltiplos parâmetros pode utilizar setParameter(valor).setParameter(valor).setParameter(valor)… ou usar o método setParameterList

obs: veja os diferentes parâmetros recebidos pelo método setParameter

Fiz a mudança do uso do setParameter (tentei as duas formas sugeridas por vocês). Porém, agora, estou tendo um outro problema:

Meu arquivo hbm está assim:

<hibernate-mapping>
    <class name="Autorizacao" table="autorizacao">

        
        
        <!-- Identificador da classe -->
            <id name="codFunc" column="CodFunc" type="string">
                <generator class="assigned"/>
            </id>
            
        <!-- Propriedades da classe -->
            <property name="indice" column="Indice" type="string"/> 
            <property name="tipo" column="Tipo" type="string"/> 
            <property name="descricao" column="Descricao" type="string"/> 
            <property name="tipoProg" column="TipoProg" type="string"/> 
                        
        <!-- Criação de Pesquisas -->
            <query name="buscaAutFuncIndiceTipoProg">
                <![CDATA[from Autorizacao autoriza where autoriza.codFunc = ? and autoriza.indice =? and autoriza.tipo = ? and autoriza.tipoProg = ? ]]>
            </query>
        
    </class>

No meu objeto de acesso ao banco, eu utilizo:

                    Query q = sessao.getNamedQuery("buscaAutFuncIndiceTipoProg");
                    q.setString(0, (String) paramChave[0]);
                    q.setString(1, (String) paramChave[1]);
                    q.setString(2, (String) paramChave[2]);
                    q.setString(3, (String) paramChave[3]);
                    retorno = (Autorizacao) q.list();

Porém, ele está lançando uma exception:

org.hibernate.MappingException: Named query not known: buscaAutFuncIndiceTipoProg

Já compilei a aplicação um sem número de vezes, mas não consegui solucionar o problema…

A classe Autorizacao está em algum pacote? Se sim, o nome da NamedQuery deve conter o caminho para o pacote + o nome da query.

ex: br.com.project.domain.Autorizacao.buscaAutFuncIndiceTipoProg

Pois é… a classe estava em um pacote…

Porém, já fiz z mudança, e o problema persiste… tem alguma outra sugestão?

class name=“Autorizacao” também deve conter o pacote.

Também já fiz essa correção…

<hibernate-mapping>
    <class name="br.com.nscinfo.beans.Autorizacao" table="autorizacao">
        <!-- Identificador da classe -->
            <id name="codFunc" column="CodFunc" type="string">
                <generator class="assigned"/>
            </id>
            
        <!-- Propriedades da classe -->
            <property name="indice" column="Indice" type="string"/> 
            <property name="tipo" column="Tipo" type="string"/> 
            <property name="descricao" column="Descricao" type="string"/> 
            <property name="tipoProg" column="TipoProg" type="string"/> 
                        
        <!-- Criação de Pesquisas -->
            <query name="buscaPorAutorizacao">
                <![CDATA[from br.com.nscinfo.beans.Autorizacao autoriza where autoriza.codFunc = ? and autoriza.indice =? and autoriza.tipo = ? and autoriza.tipoProg = ? ]]>
            </query>
        
    </class>
</hibernate-mapping>

E o acesso aos dados:

                    Query q = sessao.getNamedQuery("br.com.nscinfo.beans.Autorizacao.buscaPorAutorizacao");
                    q.setString(0, (String) paramChave[0]);
                    q.setString(1, (String) paramChave[1]);
                    q.setString(2, (String) paramChave[2]);
                    q.setString(3, (String) paramChave[3]);
                    retorno = (Autorizacao) q.list();

E mesmo assim ele continua com a exception de namedQuery not found…

<query name="buscaPorAutorizacao deve conter o nome do pacote

Também já mudei isso… fiz deploy de tudo, e o erro continua…