JPA...controle de transação ...entre dois objetos

1 resposta
P

Olá,

duvida referente ao que fazer em uma transação com dois objetos
onde vou incluir um log e um usuário só que tem que dar o commit
quando os dois foram sem erro .

E da forma que está grava o log e se der erro no usuário faz só rollback
no usuário ???

Teria outra forma de fazer :

  1. teria que controlar begin,commit na chamada do serviço
  2. fazer um serviço especifico pra tratar essa situação

Alguém teria laguma idéia como fazer ou controlar isso ???

hoje o que estou fazendo :

LogDao logDao = new LogDao()

Log log = new Log();
log.setProcesso("Processo 40");

logDao.persist(log);

UsuarioDao usuarioDao = new UsuarioDao()
Usuario usuario = new Usuario();
usuario.setNome("Novo Nome");

usuarioDao.persist(usuario);
public abstract class AbstractBaseDao<T extends Entity, ID extends Serializable>


public class LogDao extends AbstractBaseDao<Log, Long>

---DAO Generico pra todas entidades 

 public void persist(T t) throws DaoException {
    	try {
    		 
    		em.getTransaction().begin();
    		em.persist(t);
    		em.getTransaction().commit();
    	} catch(Exception e) {
    		em.getTransaction().rollback();
    	}finally{
    		
    	}


 public void merge(T t) throws DaoException {
    	try {
    //		em = factory.createEntityManager();
    		em.getTransaction().begin();
    		em.merge(t);
    		em.getTransaction().commit();
    	} catch(Exception e) {
    		em.getTransaction().rollback();
    	}finally{
    	}
    }
////////////////////////////////////////////////////////////////////////////////////
public class UsuarioDao extends AbstractBaseDao<Log, Long>

---DAO Generico pra todas entidades 

 public void persist(T t) throws DaoException {
    	try {
    		 
    		em.getTransaction().begin();
    		em.persist(t);
    		em.getTransaction().commit();
    	} catch(Exception e) {
    		em.getTransaction().rollback();
    	}finally{
    		
    	}

---
 public void merge(T t) throws DaoException {
    	try {
    //		em = factory.createEntityManager();
    		em.getTransaction().begin();
    		em.merge(t);
    		em.getTransaction().commit();
    	} catch(Exception e) {
    		em.getTransaction().rollback();
    	}finally{
    	}
    }

1 Resposta

dreampeppers99

Uma forma primitiva seria...

private boolean transacaoAutomatica = true;

  public void persist(T t) throws DaoException {  
         try {  
              if (transacaoAutomatica){  
             em.getTransaction().begin();  
             em.persist(t);  
             em.getTransaction().commit();  

} else {
             em.persist(t);  
}
         } catch(Exception e) {  
             em.getTransaction().rollback();  
         }finally{  
               
         }  

public Transaction getTx(){
return   em.getTransatcion();
}

Dai você teria algo... semelhante.

Transaction tx  = daogenerico.getTx();

tx.begin();
dao.persist(obj1);
dao.persist(obj2);
tx.commit();
Criado 12 de janeiro de 2009
Ultima resposta 12 de jan. de 2009
Respostas 1
Participantes 2