Olá, eu estou fazendo a parte de banco de dados no meu sistema (um programa de frente de caixa), e ao iniciar o programa ele instancia as Threads responsáveis por buscar os produtos, clientes, etc. na retaguarda via xml, e baixa todos para o banco, e quando um item é alterado, ou se uma empresa muda, algo do tipo, ele deveria mudar também, uma baixa de estoque ou alteração de um preço por exemplo… Até a parte de carregar os dados no banco eu consegui, mas na hora de dar o merge pra poder dar o update caso algo mude eu estou tendo este erro Transaction not successfully started
, Alguém saberia me explicar o porque isto esta acontecendo? e como eu poderia contornar esse erro… segue meu código abaixo →
private void atualizaEmpresa(Element empresaElementList) {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("fca");
EntityManager em = emf.createEntityManager();
try {
Empresa empresa = null;
List<Element> listaEmpresa = empresaElementList.getChildren("Empresa");
int i = 0;
for (Element elementPac : listaEmpresa) {
i++;
barraDeProgresso.setString(
(i == listaEmpresa.size()) ? "Concluido" : "Carregando Empresas "+i+" de "+listaEmpresa.size());
if (empresa == null) {
empresa = new Empresa();
empresa.setEmpCod(1);
}
empresa.setBairro(elementPac.getChildText("EmpresaBairro"));
empresa.setCep(elementPac.getChildText("EmpresaCep"));
empresa.setChave(elementPac.getChildText("EmpresaChave"));
empresa.setCnpj(elementPac.getChildText("EmpresaCnpj"));
empresa.setEndereco(elementPac.getChildText("EmpresaEndereco"));
empresa.setInscEstadual(elementPac.getChildText("EmpresaInscEstadual"));
empresa.setInscMunicipal(elementPac.getChildText("EmpresaInscMunicipal"));
empresa.setMunCod(Integer.parseInt(elementPac.getChildText("EmpresaMunicipio")));
empresa.setNomeFantasia(elementPac.getChildText("EmpresaNomeFantasia"));
empresa.setNumero(Integer.parseInt(elementPac.getChildText("EmpresaNumero")));
empresa.setRazaoSocial(elementPac.getChildText("EmpresaRazaoSocial"));
empresa.setEmpCodRetaguarda(Integer.parseInt(elementPac.getChildText("EmpCodRetaguarda")));
em.getTransaction().begin();
try {
em.persist(empresa);
em.getTransaction().commit();
} catch (RollbackException e) {
em.find(empresa.getClass(), Integer.parseInt(elementPac.getChildText("EmpCodRetaguarda")));
em.merge(empresa);
em.getTransaction().commit();
}
}
} catch (DAOException e) {
}finally {
em.close();
emf.close();
emf = null;
em = null;
}
}
Desde já agradeço a atenção!