Persistir varios Objetos com a mesma Transação JPA

1 resposta
RenanSR

Olá galera, eu estou tentando persistir varios objetos de uma vez utilizando a mesma transação JPA, ele persiste mas não persiste todos, está perdendo grande parte, por exemplo de 144 objetos inseriu apenas 28.

public class Fabrica {
	 private static Fabrica me;
	 private EntityManagerFactory emf;
	 
	  private Fabrica() {
	        emf = Persistence.createEntityManagerFactory("Scet");
	  }

	  public static Fabrica getInstance() {
		  if (me == null) {
			  me = new Fabrica();
	       }
	     return me;
	 }
	  
	 public EntityManager getEntityManager() {
	        EntityManager toReturn = emf.createEntityManager();
	        toReturn.getTransaction().begin();
	        return toReturn;
	 }
}

Metodo que persiste uma coleção de objetos

protected void inserir(List<Object> colecao)throws NegocioException{
    	EntityManager persistencia = Fabrica.getInstance().getEntityManager();
    	
    	try{
    		for(Object item: colecao){
        		persistencia.persist(item);
        	}
    		persistencia.getTransaction().commit();
    		persistencia.close();
    	}catch(Exception e){
    		persistencia.getTransaction().rollback();
    		throw new NegocioException("Erro de persistência - "+e);
    	}
    }

Pesquisei bastante mas não consegui a solução.

1 Resposta

rmendes08

Sugestão: abra e feche a transação sempre no mesmo escopo, além do mais, nem sempre que você obtém um EntityManager você quer uma transação comece imediatamente. Resumindo, coloque a chamada getTransaction().begin() no método inserir.

Bom, como o seu método inserir é genérico, isto é, ele persiste qualquer tipo de objeto, verifique se os objetos que você está tentando persistir estão mapeados corretamente.

Criado 29 de maio de 2012
Ultima resposta 30 de mai. de 2012
Respostas 1
Participantes 2