estou tentando trazer uma List de objetos, porém, quando executo a query é executada uma query antes que dá um update no id do relacionamento, logo a query seguinte não acha e me retorna a lista vazia. já procurei bloco anônimo, bloco stático, construtores (inclusive de super, mas não herda de ninguém, logo não existe), já tirei de HQL e passei pra NativeQuery, notação na entidade, já debuguei todo o processo, procurei por trigger no banco ... enfim ... não consegui encontrar nada. se alguém puder me ajudar, dar uma dica. a aplicação está em EJB com strtus 1 e banco Oracle.
segue a query que é exibida no showsql:
12:30:54,476 INFO [STDOUT] Hibernate:
update
CAD_RAZOES_SOCIAIS
set
FK_CODIGO_PJS=null
where
FK_CODIGO_PJS=?
12:30:54,489 INFO [STDOUT] Hibernate:
SELECT
*
FROM
CAD_RAZOES_SOCIAIS rs
WHERE
rs.FK_CODIGO_PJS = ?
ORDER BY
rs.DESCRICAO
e segue minha query nativa:
public List<RazaoSocial> getByPessoaJuridicaCodigo(Long idPessoaJuridica){
List<RazaoSocial> razoesSociais = new ArrayList<RazaoSocial>();
Query query = em.createNativeQuery("SELECT * FROM CAD_RAZOES_SOCIAIS rs " +
" WHERE rs.FK_CODIGO_PJS = :idPessoaJuridica " +
" ORDER BY rs.DESCRICAO", RazaoSocial.class);
query.setParameter("idPessoaJuridica", idPessoaJuridica);
try{
razoesSociais = query.getResultList();
}catch(NoResultException e){
e.printStackTrace();
}
return razoesSociais;
}
faz um debug no seu metodo, e veja se ao entrar ele executa esse update logo quando entra, se sim, provavelmente tem algum codigo perdido, se nao, ele executa a query update quando executa o select, provavelmente tem alguma coisa estranha nas suas anotacoes.
Tenta comentar a chamada ao método getResultList e depois ao invés de chamar esse método, chama o método em.flush();
Caso chamando o flush a query que faz o update seja realizada é pq tem algum outro local que faz update antes…
[quote=rogeriopaguilar]Tenta comentar a chamada ao método getResultList e depois ao invés de chamar esse método, chama o método em.flush();
Caso chamando o flush a query que faz o update seja realizada é pq tem algum outro local que faz update antes…[/quote]
pow cara resolvi, vlw pela dica!
o que acontecia …
como eu estava trabalhando no facadebean e estava inicializando a entidade e mando buscar no banco, quando eu mandava efetuar uma transação ele dava update na inicialização ( settando null no código do relacionamento ) e depois na busca da lista ele não encontrava. equivoco bobo (falta de conhecimento meu :? ), mas pode ajudar alguém futuramente.
mas … muito obrigado ao pessoal que tentou ajudar!!!
[quote=mairon][quote=Hebert Coelho]Pra rolar o update você não precisa de um comando merge() por exemplo.
Você está alterando alguma entidade antes do select?
Por exemplo, você está fazendo algo como pessoa.setNome(“jose”) em uma entidade?[/quote]
isso acontece independentemente de eu está trabalhando com EJB (no caso ocorrido, eu estava trabalhando dentro do facade)??[/quote]Isso acontece pq seu objeto estava attached. Qualquer alteração realizada será refletida no DB.