Bom Dia pessoal, estou tendo problemas para persistir uma grande quantidade de registros no banco.
Eu carrego um arquivo csv com mais de 50 mil registros, cada linha representa um objeto meu, preciso ler linha a linha e persistir no banco. até a i tudo bem. Mas qnd coloco isso em um loop para ler a linha popular um objeto e persistir no banco o hibernate me lança a seguinte exception : Transaction not successfully started .
Alguem teria alguma dica me que eu possa fazer isso ou o porque deste erro?
Posta o código pra gente dar uma olhada… Mas isso aí ta com cara que vc tá usando o método da classe Session “getTransaction()” ao invés do “beginTransaction()” para iniciar a transação. No caso, você deve estar pegando uma “transação não iniciada”;
J
juniorsml
O metodo que percorro o arquivo e persisto o objeto é este:
publicActionForwardexecute(ActionMappingmapping,ActionFormform,
HttpServletRequestreq,HttpServletResponseres){longpri=System.currentTimeMillis();try{
//inti=0;Stringlinha=null;ImportacaoFuncionarioceaBusinessbusiness=newImportacaoFuncionarioceaBusiness();LinkedList<Funcionario>funcionarios=newLinkedList<Funcionario>();FuncionarioHibernateDAOaux=newFuncionarioHibernateDAO();FileReaderreader=newFileReader(newFile(req.getParameter("file")));BufferedReaderleitor=newBufferedReader(reader);leitor.readLine(); // despresa a primeira linha do arquivo desligamentowhile((linha=leitor.readLine())!=null)aux.makePersistent(business.populaFuncionario(linha.split(";",50)));}
Como está abrindo sessão e transação a todo momento… e você vai ler/inserir muitos registros de uma vez, tente personalizar seu DAO para abrir a sessão e iniciar a transação de fora… e após o processamento, commit ou rollback no caso de erro e fechando a transação.
Lembrando de executar de tempos em tempos o flush() e o clear().
J
juniorsml
Boa Tarde.
Obrigado pela ajuda de todos, consegui resolver o problema, fiz conforme foi falado :
Criei um metodo personalizado na minha dao para só após todos os saves ele desse o commit().
e realmente o problema estava dando porque conforme o ErickRAR disse, eu estava abrindo a sessão na hora errada.
Agora está tudo rodando, Valeu mesmo pela força pessoal.