[RESOLVIDO] Executando query anonima

Pow pessoal, o problema é o seguinte.

  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.

já debuguei.
já passei pelo facadebean, chega no daoImpl , entra no método … mas só chama o update quando dá o resultList.

ta f…!

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…

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=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!!! :stuck_out_tongue:

[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 ai mesmo cara, pena não ter visto tua dica antes. mas vlw pela moral. abraços!

[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=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.

Veja esse post: JPA: Mini Livro - Primeiros passos e conceitos detalhados