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

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.

[code] 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();

[/code]

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

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

[quote=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[/quote]

A idéia é pegar sempre a mesma…

[code]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();
}

}[/code]

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

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)

aumente o nível do log do hibernate pra INFO