[RESOLVIDO]Usando hibernate + vraptor, Update só gera no commit? Como mudar isto

5 respostas
R

Bom dia. Alguem poderia me dizer pq o update só é enviado para o Banco de dados no momento do Commit.
tenho a seguinte situação. tem uma agenda de tarefas. quando iniciar ela que altear uma descricao do banco dizendo que a operação entrou em execução.. e ao final.. esta descrição passa a dizer que concluio. Isto estando na mesma transação.
só que o hibernate + Vraptor esta mandando o update apenas no commit. fazendo que o primeiro update não tenha efeito nenhum.

CriadorDeSessionParaTarefas criadorDeSessionParaTarefas = new CriadorDeSessionParaTarefas();
		RequisicaoDeTarefaDAO requisicaoDeTarefaDAO = new RequisicaoDeTarefaDAO(
				criadorDeSessionParaTarefas.getInstance());
		Transaction transaction = null;
		transaction = criadorDeSessionParaTarefas.getInstance().beginTransaction();
		
		try {
			RequisicaoDeTarefa requisicaoDeTarefa = requisicaoDeTarefaDAO.pegaRequisicaoTarefaporID(this.idTarefaRequisicao);
			
                        //este update não é enviado ao banco de dados
			requisicaoDeTarefa.setDescricaoConclusao("Em execução");
			requisicaoDeTarefaDAO.altera(requisicaoDeTarefa);
			
			
			GeradorSpedFiscal geradorSpedFiscal = new GeradorSpedFiscal(
					criadorDeSessionParaTarefas.getInstance(),
					new EmpresaFilialDAO(criadorDeSessionParaTarefas
							.getInstance()),
					new LivroFiscalDAO(criadorDeSessionParaTarefas
							.getInstance()), new MovimentoGIADAO(
							criadorDeSessionParaTarefas.getInstance()),
					new CIAPParaSPEDDAO(criadorDeSessionParaTarefas
							.getInstance()));

			String arquivoSalvar = ""+"EFD_0"+this.sufixoCNPJ+"042011"+".txt";
			geradorSpedFiscal.executarSPED(this.sufixoCNPJ, this.dataInicial, arquivoSalvar);
			
                       //este update é enviado ao banco de dados 

			requisicaoDeTarefa.setArquivoGerado(arquivoSalvar);
			requisicaoDeTarefa.setDataDaConclusao(Calendar.getInstance());
			requisicaoDeTarefa.setDescricaoConclusao("Arquivo Concluido");
			requisicaoDeTarefaDAO.altera(requisicaoDeTarefa);

			transaction.commit();

Só gera a sql update envia o comando ao banco no primeiro update.

Ah, este meu codigo esta num metodo run(). para um schedule do spring. por isso que estou criando a session do hibernate dentro do metodo. pois na execução já poderia esta com a session finalizada.

Obrigado pela ajuda

5 Respostas

Lucas_Cavalcanti

essa linha:

criadorDeSessionParaTarefas.getInstance();

sempre retorna uma session nova? ou aproveita a antiga?

se retorna uma nova, o problema é que vc está usando uma sessão para controlar a transação, e outra pra passar pro dao, daí não adianta estar na transação

R
Lucas Cavalcanti:
essa linha:
criadorDeSessionParaTarefas.getInstance();

sempre retorna uma session nova? ou aproveita a antiga?

se retorna uma nova, o problema é que vc está usando uma sessão para controlar a transação, e outra pra passar pro dao, daí não adianta estar na transação

A idéia é pegar sempre a mesma..

public class CriadorDeSessionParaTarefas {
	private final Session session;
	private CriadorDeSessionFactory criadorDeSessionFactory;
	private CriadorDeSession criadorDeSession;

	public CriadorDeSessionParaTarefas() {
		this.criadorDeSessionFactory = new CriadorDeSessionFactory();
		this.criadorDeSessionFactory.abre();

		this.criadorDeSession = new CriadorDeSession(
				criadorDeSessionFactory.getInstance());
		this.criadorDeSession.abre();

		this.session = criadorDeSession.getInstance();
	}

	public Session getInstance() {
		return this.session;
	}

	public void fechaSession() {
		if (this.criadorDeSession.getInstance().getTransaction().isActive()) {
			this.criadorDeSession.getInstance().getTransaction().rollback();
		}
		this.criadorDeSession.fecha();
		this.criadorDeSessionFactory.fecha();
	}
}
Lucas_Cavalcanti

bem estranho então… o hibernate só não vai gerar o UPDATE se vc passar uma entidade idêntica à que estava managed… tem alguma coisa bem estranha no seu projeto

R

Lucas consegui fazer que o hibernate manda o comando sql para o banco. colocando um session.flush() apos o update.

public void altera(RequisicaoDeTarefa requisicaoDeTarefa) { session.update(requisicaoDeTarefa); session.flush(); }

O commit tem um flush imbutido certo. Este como flush tem esta função realmente, de “envio” de comandos SQL ao banco de dados.

E aproveitando… se vc pode me ajudar… esta parte de codigo sempre aparece pra mim no console… mesmo fazendo outras coisas sem a ter a ver com estas classes… pq poderia acontecer isto…

14:10:09,880 DEBUG [Collections         ] Collection found: [br.com.diplomata.dominio.nf.parametros.ClassificacaoFiscal.subClassificacaoFiscal#2], was: [br.com.diplomata.dominio.nf.parametros.ClassificacaoFiscal.subClassificacaoFiscal#2] (uninitialized)
14:10:09,880 DEBUG [Collections         ] Collection found: [br.com.diplomata.dominio.nf.parametros.SubClassificacaoFiscal.operacaoFiscal#component[codigo,classificacaoFiscal]{codigo=5, classificacaoFiscal=br.com.diplomata.dominio.nf.parametros.ClassificacaoFiscal#2}], was: [br.com.diplomata.dominio.nf.parametros.SubClassificacaoFiscal.operacaoFiscal#component[codigo,classificacaoFiscal]{codigo=5, classificacaoFiscal=br.com.diplomata.dominio.nf.parametros.ClassificacaoFiscal#2}] (uninitialized)
14:10:09,880 DEBUG [Collections         ] Collection found: [br.com.diplomata.dominio.nf.parametros.OperacaoFiscal.mapeaCFOP#component[subClassificacaoFiscal,codigo]{codigo=56, subClassificacaoFiscal=br.com.diplomata.dominio.nf.parametros.SubClassificacaoFiscal}], was: [br.com.diplomata.dominio.nf.parametros.OperacaoFiscal.mapeaCFOP#component[subClassificacaoFiscal,codigo]{codigo=56, subClassificacaoFiscal=br.com.diplomata.dominio.nf.parametros.SubClassificacaoFiscal}] (uninitialized)
14:10:09,880 DEBUG [Collections         ] Collection found: [br.com.diplomata.dominio.nf.parametros.OperacaoFiscal.naturezaOperacao#component[subClassificacaoFiscal,codigo]{codigo=56, subClassificacaoFiscal=br.com.diplomata.dominio.nf.parametros.SubClassificacaoFiscal}], was: [br.com.diplomata.dominio.nf.parametros.OperacaoFiscal.naturezaOperacao#component[subClassificacaoFiscal,codigo]{codigo=56, subClassificacaoFiscal=br.com.diplomata.dominio.nf.parametros.SubClassificacaoFiscal}] (uninitialized)
14:10:09,880 DEBUG [Collections         ] Collection found: [br.com.diplomata.dominio.nf.parametros.ClassificacaoFiscal.subClassificacaoFiscal#1], was: [br.com.diplomata.dominio.nf.parametros.ClassificacaoFiscal.subClassificacaoFiscal#1] (uninitialized)
14:10:09,880 DEBUG [Collections         ] Collection found: [br.com.diplomata.dominio.nf.parametros.SubClassificacaoFiscal.operacaoFiscal#component[codigo,classificacaoFiscal]{codigo=5, classificacaoFiscal=br.com.diplomata.dominio.nf.parametros.ClassificacaoFiscal#1}], was: [br.com.diplomata.dominio.nf.parametros.SubClassificacaoFiscal.operacaoFiscal#component[codigo,classificacaoFiscal]{codigo=5, classificacaoFiscal=br.com.diplomata.dominio.nf.parametros.ClassificacaoFiscal#1}] (uninitialized)
14:10:09,880 DEBUG [Collections         ] Collection found: [br.com.diplomata.dominio.nf.parametros.OperacaoFiscal.mapeaCFOP#component[subClassificacaoFiscal,codigo]{codigo=56, subClassificacaoFiscal=br.com.diplomata.dominio.nf.parametros.SubClassificacaoFiscal}], was: [br.com.diplomata.dominio.nf.parametros.OperacaoFiscal.mapeaCFOP#component[subClassificacaoFiscal,codigo]{codigo=56, subClassificacaoFiscal=br.com.diplomata.dominio.nf.parametros.SubClassificacaoFiscal}] (uninitialized)
14:10:09,880 DEBUG [Collections         ] Collection found: [br.com.diplomata.dominio.nf.parametros.OperacaoFiscal.naturezaOperacao#component[subClassificacaoFiscal,codigo]{codigo=56, subClassificacaoFiscal=br.com.diplomata.dominio.nf.parametros.SubClassificacaoFiscal}], was: [br.com.diplomata.dominio.nf.parametros.OperacaoFiscal.naturezaOperacao#component[subClassificacaoFiscal,codigo]{codigo=56, subClassificacaoFiscal=br.com.diplomata.dominio.nf.parametros.SubClassificacaoFiscal}] (uninitialized)
14:10:09,880 DEBUG [Collections         ] Collection found: [br.com.diplomata.dominio.nf.parametros.SubClassificacaoFiscal.operacaoFiscal#component[codigo,classificacaoFiscal]{codigo=1, classificacaoFiscal=br.com.diplomata.dominio.nf.parametros.ClassificacaoFiscal#2}], was: [br.com.diplomata.dominio.nf.parametros.SubClassificacaoFiscal.operacaoFiscal#component[codigo,classificacaoFiscal]{codigo=1, classificacaoFiscal=br.com.diplomata.dominio.nf.parametros.ClassificacaoFiscal#2}] (uninitialized)
Lucas_Cavalcanti

aumente o nível do log do hibernate pra INFO

Criado 10 de junho de 2011
Ultima resposta 10 de jun. de 2011
Respostas 5
Participantes 2