gapler
Fevereiro 27, 2008, 4:08pm
#1
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
Amanweb
Fevereiro 27, 2008, 4:21pm
#3
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
gapler
Fevereiro 29, 2008, 7:58am
#4
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…
Amanweb
Fevereiro 29, 2008, 8:07am
#5
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
gapler
Fevereiro 29, 2008, 9:07am
#6
Pois é… a classe estava em um pacote…
Porém, já fiz z mudança, e o problema persiste… tem alguma outra sugestão?
Amanweb
Fevereiro 29, 2008, 9:20am
#7
class name=“Autorizacao” também deve conter o pacote.
gapler
Fevereiro 29, 2008, 9:28am
#8
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…
Amanweb
Fevereiro 29, 2008, 10:00am
#9
<query name="buscaPorAutorizacao deve conter o nome do pacote
gapler
Fevereiro 29, 2008, 11:54am
#10
Também já mudei isso… fiz deploy de tudo, e o erro continua…