RollBack não funciona [RESOLVIDO]

7 respostas
A
estou tentando dá um rollback na minha aplicação mas ele nao funciona ... Arquivo de configuração do hibernate
<hibernate-configuration>
 <session-factory>
  <!-- <property name="hibernate.connection.pool_size">10</property> -->
  <property name="show_sql">false</property>
  <property name="format_sql">false</property>
  <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
  <property name="hibernate.hbm2ddl.auto">update</property>
  <property name="hibernate.use_identifier_rollback">true</property>
  </session-factory>
</hibernate-configuration>
Transaction transaction = null; 
		Session session = null;
		try{
			session = HibernateSessionFactory.retornaSessionUsuario(getPRESTADOR());
			System.out.println(" ....: PEGOU A SESSAO SO USUARIO :.......");
			transaction = session.beginTransaction();
			System.out.println(" ....: ABRIU A TRANSACOA DO USUARIO  :.......");
			AudioHistorico ultimoHistorico = new AudioHistorico();
			ultimoHistorico = audioHistoricoService.getUltimoHistoricoArquivo(new Integer(idAudio), getPRESTADOR());
			boolean podeIniciar = true;
			if(ultimoHistorico.getAcao() != null && ultimoHistorico.getAcao().equals("2")){
				if(ultimoHistorico.getDataFim() == null){
					podeIniciar = false;
				}
			}
			if(podeIniciar){
				System.out.println(" ....: INICIANDO :.......");
				Atividade atividade = new Atividade();
				System.out.println(" ....: PASSO 1 :.......");
				AudioGravado audioGravado = new AudioGravado();
				System.out.println(" ....: PASSO 2:.......");
				AudioHistorico audioHistorico = new AudioHistorico();
				System.out.println(" ....: PASSO 3:.......");
				audioGravado = audioService.getAudioGravadoPorId(new Integer(idAudio), getPRESTADOR());
				System.out.println(" ....: PASSO 4:.......");
				atividade = atividadeService.buscaProximaAtividade(audioGravado,null,getPRESTADOR());
				System.out.println(" ....: PASSO 5:.......");
				audioHistorico.setAtividade(atividade);
				System.out.println(" ....: PASSO 6:.......");
				audioHistorico.setUsuario(getUsuarioLogado());
				System.out.println(" ....: PASSO 7:.......");
				audioHistorico.setAcao("2");
				System.out.println(" ....: PASSO 8:.......");
				audioHistorico.setAudio(audioGravado);
				System.out.println(" ....: PASSO 9:.......");
				audioHistorico.setDataInicio(new Date());
				System.out.println(" ....: PASSO 10:.......");
				session.save(audioHistorico);
				//audioService.salvarAudioHistorico(audioHistorico, getPRESTADOR());
				System.out.println(" ....: SALVANDO O HISTORICO :.........");
				audioGravado = null;
				audioGravado.setAtividade(atividade);
				System.out.println(" ....: PASSO 11:.......");
				audioGravado.setStatus("21");
				
				System.out.println(" ....: PASSO 12:.......");
				session.save(audioGravado);
				//audioService.salvarAudioGravado(audioGravado, getPRESTADOR());
				System.out.println(" ....: SALVANDO AUDIO GRAVADO :.......");
				transaction.commit();
				System.out.println(" ....: COMMIT DA ROTINA:.......");
			}
		}catch (Exception e) {
			System.out.println(" ....: DANDO O ROLLBACK DA ALTERACAO:.......");
			transaction.rollback();
			//e.printStackTrace();
			//informarErro(getUsuarioLogado(), "AudioComumMB - iniciarAudio", ""+e.fillInStackTrace());
		}
	}

Alguem sabe o q estou fazendo de errado..

7 Respostas

A

ta dando algum erro, o que está acontencendo?

A

Então na console nao da erro nenhum …e também não volta a alteração :frowning:

A

mas ele ta entrando do catch ne? estranho era para voltar cara.

t+

O

Esta utilizando MyIsam?

Caso sim mude para InnoDB.

MyIsam não tem suporte a transação.

A

Então cara eu coloquei e não funcionou ... é assim que tinha q ser neh ?

<hibernate-configuration>
 <session-factory>
  <!-- <property name="hibernate.connection.pool_size">10</property> -->
  <property name="show_sql">false</property>
  <property name="format_sql">false</property>
  <property name="dialect">org.hibernate.dialect.MySQL5InnoDBDialect </property>
  <property name="hibernate.hbm2ddl.auto">update</property>
  <property name="hibernate.use_identifier_rollback">true</property>

vlw

O

Tem que ver no banco também.

Rode o seguinte comando no seu banco.

SHOW TABLE STATUS FROM NOME_BANCO;

Na coluna Type tem que mostrar InnoDB para funcionar a transação.

Se não tiver mostrando, terá que fazer um ALTER TABLE para InnoDB.

A

Era isso mesmo o ENGINE estava como MyIsam… ai alterei para InnoDB funcionou …
uhuh … rsrs

vlw ´s :smiley:

Criado 9 de dezembro de 2011
Ultima resposta 12 de dez. de 2011
Respostas 7
Participantes 3