[RESOLVIDO] Executando query anonima

8 respostas
M

Pow pessoal, o problema é o seguinte.

estou tentando trazer uma List de objetos, porém, quando executo a query é executada uma query antes que  um update no id do relacionamento, logo a query seguinte não acha e me retorna a lista vazia.  procurei bloco anônimo, bloco stático, construtores (inclusive de super, mas não herda de ninguém, logo não existe),  tirei de HQL e passei pra NativeQuery, notação na entidade,  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;
	}

8 Respostas

R

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.

M

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

ta f…!

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…

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?

M

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…

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:

M

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?

é isso ai mesmo cara, pena não ter visto tua dica antes. mas vlw pela moral. abraços!

M

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?

isso acontece independentemente de eu está trabalhando com EJB (no caso ocorrido, eu estava trabalhando dentro do facade)??

Hebert_Coelho

mairon:
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?

isso acontece independentemente de eu está trabalhando com EJB (no caso ocorrido, eu estava trabalhando dentro do facade)??

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

Criado 8 de março de 2013
Ultima resposta 8 de mar. de 2013
Respostas 8
Participantes 4