JPA não esta sincronizando com o banco de dados

1 resposta
C

Pessoa é o seguinte, tenho as seguintes Classes que representam o módulo de entrada do meu sistema, é um módulo mestre detalhe.

Estou com o seguinte problema, vamos supor que tenho uma entrada com 3 itens, se eu remover um item ele retira a quantidade do estoque e remove o item dessa entrada. Blz!!! é isso msm... certinho.... Só que se eu fechar o sistema e abrir de novo ou seja ( reconectar com o banco ), o item que foi removido volta para a entrada.

Entrada

@Entity
public class Entrada implements Serializable {
 	
	private static final long serialVersionUID = 1L;

	@Id
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	private Integer numero;
	
	@Temporal(TemporalType.DATE)
	private Date dataEntrada;
	
	@ManyToOne()
	@JoinColumn(name="FORNECEDOR")
	private Fornecedor fornecedor;
	
	@OneToMany(mappedBy="entrada", cascade=CascadeType.ALL)	
	private List<ItemEntrada> itemEntrada ;

ItemEntrada

@Entity
@IdClass(PKItemEntrada.class)
public class ItemEntrada implements Serializable {

	private static final long serialVersionUID = 1L;	
	
	@Id
	@Column(insertable=false, updatable=false)
	private Integer numero;
	
	@Id	
	@Column(name="INSUMO", insertable=false, updatable=false)
	private Integer codigoinsumo;
	
	@ManyToOne(targetEntity=Entrada.class)
	@JoinColumn(name="NUMERO")		
	private Entrada entrada;
	
	@ManyToOne(cascade=CascadeType.MERGE)
	@JoinColumn(name="INSUMO")	
	private Insumo insumo;
	
	@Column(precision=9, scale=2)
	private Double quantidade;
	 
	@Column(precision=9, scale=2)
	private Double valor;

essa é minha classe de controle, toda requisição do Entrada.JSP passa por ela:

public class EntradaAction implements IAction {

	private EntityManager em ;
	private EntityTransaction et;
	private Entrada entrada ;
	
	@Override
	public void alterar(HttpServletRequest req, HttpServletResponse resp)
			throws Exception {

		try{									
			
			entrada = (Entrada)req.getSession().getAttribute("entrada") ; 
			
			entrada.setFornecedor(new Fornecedor( req.getParameter("codigofornecedor").equals("") ? null : Integer.parseInt( req.getParameter("codigofornecedor") ) ));
			entrada.setDataEntrada( Util.toCalendar(req.getParameter("dataentradaentrada")).getTime() );
			
			req.getSession().setAttribute("entrada", null);
			
			em = JpaUtil.openEntityManager();
			
			et = em.getTransaction();
						
			et.begin();
			
			Dao<Entrada> daoEntrada = Dao.getInstance(em);
			
			daoEntrada.alterar(entrada);	
						
			et.commit();
						
			JpaUtil.closeEntityManager();
			
		}catch(Exception e){
			resp.getWriter().write("erro" + e.getMessage() );		
			if (et != null && et.isActive())
				et.rollback();
		}

	}

	@Override
	public void consultar(HttpServletRequest req, HttpServletResponse resp)
			throws Exception {

		try{									
			
			em = JpaUtil.openEntityManager();
			
			et = em.getTransaction();
			et.begin();
						
			Dao<Entrada> daoEntrada = Dao.getInstance(em);
			
			List<Entrada> entradas = null ;
			
			String query = " SELECT a.* FROM Entrada a WHERE numero > 0 " ;
			
			if (Util.isDate( req.getParameter("dataentradaini")))
			   query += " and dataEntrada >= '" + Util.formatData(req.getParameter("dataentradaini"), "yyyy/MM/dd") + "'"  ;			   			
			
			if (Util.isDate( req.getParameter("dataentradafim")))
				query += " and dataEntrada <= '" + Util.formatData(req.getParameter("dataentradafim"), "yyyy/MM/dd") + "'"  ;
			
			if ( req.getParameter("codigofornecedor") != null && !req.getParameter("codigofornecedor").equals("") )
				query += " and fornecedor = " + req.getParameter("codigofornecedor")  ;
			
			entradas = daoEntrada.listar(Entrada.class, query);															
			
			et.commit();
			
			JpaUtil.closeEntityManager();
			
			String retorno = "<div id='barra'><div id='labelnumero'>Número</div><div id='labeldata'>Data</div><div id='labelfornecedor'>Fornecedor</div><div id='labelexcluir'>Excluir</div></div>" ;
		
			if (entradas != null)
				for (int x = 0; x < entradas.size(); x++) {				
					retorno += "<div><a href=\"#\" onclick=\"javascript:carregardiv('pages/entrada.jsp', 'pagina'); javascript:pesquisaobjeto('EntradaAction.do!pesquisarObjeto?numero=" + 
					           entradas.get(x).getNumero() + "'); habilitarElemento('excluir', true);\"> <div id='labelnumero'>" + entradas.get(x).getNumero() + 
					           "</div><div id='labeldata'>" + Util.dateToString( entradas.get(x).getDataEntrada(), "dd/MM/yyyy") + 
					           "</div><div id='labelfornecedor'>" + entradas.get(x).getFornecedor().getNome() + "</div></a>" +
					           "<div id='labelexcluir' onclick=\"if (window.confirm('Confirma excluir o registro ?')) { enviaurl('EntradaAction.do!excluir?numero=" + entradas.get(x).getNumero() + "'); carregardiv('EntradaAction.do!consultar?dataentradaini=" + req.getParameter("dataentradaini") + "&dataentradafim=" + req.getParameter("dataentradafim") + "&codigofornecedor=" + req.getParameter("codigofornecedor")  + "', 'listaconsulta'); }\"><img src='images/del.jpg' alt='Exluir Registro' border='0'/>&nbsp;</img></div></div>";
				}	
							
			resp.getWriter().write(retorno);
									
		}catch(Exception e){			
			resp.getWriter().write("erro" + e.getMessage() );						
			if (et != null && et.isActive())
				   et.rollback();
		}				
		

	}

	@Override
	public void excluir(HttpServletRequest req, HttpServletResponse resp)
			throws Exception {
		
		try{
			
			entrada = (Entrada)req.getSession().getAttribute("entrada");
			
			em = JpaUtil.openEntityManager();
			
			et = em.getTransaction();
						
			et.begin();
			
			Dao<Entrada>daoEntrada = Dao.getInstance(em);
			
			if (entrada == null)											
				entrada = daoEntrada.pesquisar(Entrada.class, Integer.parseInt(req.getParameter("numero")));							
			
			if (entrada.validarItens(entrada.getItemEntrada())){										
			
				daoEntrada.excluir(entrada);
								
				req.getSession().setAttribute("entrada", null);
				
				et.commit();
				
			}else
				et.rollback();						
			
			JpaUtil.closeEntityManager();

			
		}catch(Exception e){
			resp.getWriter().write("erro" + e.getMessage() );		
			if (et != null && et.isActive())
				et.rollback();			
		}

	}

	@Override
	public void incluir(HttpServletRequest req, HttpServletResponse resp)
			throws Exception {
		
		try{									
			
			entrada = (Entrada)req.getSession().getAttribute("entrada") ; 
			
			entrada.setFornecedor(new Fornecedor( req.getParameter("codigofornecedor").equals("") ? null : Integer.parseInt( req.getParameter("codigofornecedor") ) ));
			entrada.setDataEntrada( Util.toCalendar(req.getParameter("dataentradaentrada")).getTime() );
			
			req.getSession().setAttribute("entrada", null);
			
			em = JpaUtil.openEntityManager();
			
			et = em.getTransaction();
						
			et.begin();
			
			Dao<Entrada> daoEntrada = Dao.getInstance(em);
			
			daoEntrada.gravar(entrada);	
						
			et.commit();
						
			JpaUtil.closeEntityManager();
			
		}catch(Exception e){
			resp.getWriter().write("erro" + e.getMessage() );		
			if (et != null && et.isActive())
				et.rollback();
		}
		
	}

	@Override
	public void pesquisar(HttpServletRequest req, HttpServletResponse resp)
			throws Exception {
		
		try{
			
			if (Util.isDate(req.getParameter("dataentradaentrada"))){
							
				em = JpaUtil.openEntityManager();
			
				et = em.getTransaction();
				
				et.begin();
			
				Dao<Entrada> daoEntrada = Dao.getInstance(em);
			
				List<Entrada> entradas = daoEntrada.listar("entradaPorData", Util.toCalendar(req.getParameter("dataentradaentrada")).getTime());
			
				et.commit();
								
				JpaUtil.closeEntityManager();
			
				String retorno = "<ul id='listaentrada'>" ;
			
				if (entradas != null){
				
					for (Entrada entrada : entradas){
					
						retorno += "<li><a href=\"#\" onclick=\"javascript:pesquisaobjeto('EntradaAction.do!pesquisarObjeto?numero=" + 
			                   	entrada.getNumero() + 
			                   	"'); escondecomponente('listaentrada'); habilitarElemento('excluir', true);\"><div style=\"{float: left; width: 30px;}\">" +
			                   	entrada.getNumero() + "</div><div>" +
			                   	entrada.getFornecedor().getNome() + "</div></a></li>";
					
					}
				
					retorno += "</ul>";
			
					resp.getWriter().write(retorno);
					
				}
				
			}
			
		}catch(Exception e){
			resp.getWriter().write("erro" + e.getMessage() ) ;
			if (et != null && et.isActive())
				et.rollback();
			
		}

	}

	@Override
	public void pesquisarObjeto(HttpServletRequest req, HttpServletResponse resp)
			throws Exception {
		
		try{									
			
			em = JpaUtil.openEntityManager();
					
			et = em.getTransaction();

			et.begin();

			Dao<Entrada> daoEntrada = Dao.getInstance(em);

			Entrada entrada = null ;
			List<Entrada> entradas = null ;					
			
			if (Util.isNumeric(req.getParameter("numero")))
				entrada = daoEntrada.pesquisar(Entrada.class, Integer.parseInt(req.getParameter("numero")));
				
			else if (Util.isDate(req.getParameter("numero")))
			    entradas = daoEntrada.listar("entradaPorData", Util.toCalendar(req.getParameter("numero")).getTime() );
				
			et.commit();
			
			//JpaUtil.closeEntityManager();
			
			String retorno = "" ;
			
			if (entradas != null && entradas.size() > 0)
				entrada = entradas.get(0);

			if (entrada != null){
				
				retorno = "numeroentrada|" + entrada.getNumero() + "|" +
						  "dataentradaentrada|" + Util.dateToString(entrada.getDataEntrada(), "dd/MM/yyyy") + "|" +
						  "codigofornecedor|" + entrada.getFornecedor().getCodigo() + "|" +
				          "nomefornecedor|" + entrada.getFornecedor().getNome() + "|DIVdetalhe|" ;
				
				for (ItemEntrada item : entrada.getItemEntrada()){
					
					retorno += "<div style=\"background-color: #7C7C7C;\">"+
		            		   "<div id=\"labelinsumo\">" + item.getInsumo().getDescricao() + "</div>" +
		            		   "<div id=\"labelquantidade\">" + item.getQuantidade() + "</div>" +
		            		   "<div id=\"labelvalor\">" + Util.doubleToStr( item.getValor() ) + "</div></div>"+
		            		   "<div style=\"float:left; margin-left:5px;\" onclick=\"if (window.confirm('Confirma remover o item ?')) carregardiv('EntradaAction.do!remover?codigoinsumo=" + item.getInsumo().getCodigo() +"', 'detalhe'); \"><img src='images/del.jpg' alt='Exluir Registro' border='0'/>&nbsp;</img></div>" ;
				 	 
				}

				retorno += "|" ;
				
				req.getSession().setAttribute("entrada", entrada);

			}
			
			resp.getWriter().write(retorno);
					
						
		}catch(Exception e){
			resp.getWriter().write("erro" + e.getMessage() );			
			if (et != null && et.isActive())
				   et.rollback();
		}


	}

	
	public void adicionar(HttpServletRequest req, HttpServletResponse resp)
			throws Exception{
		
		try{
						
			Insumo insumo = null ;
			
			if (!req.getParameter("codigoinsumo").equals("")){
				
				em = JpaUtil.openEntityManager();
			
				//et = em.getTransaction();
				//et.begin();
			
				Dao<Insumo> daoInsumo = Dao.getInstance(em);
			
				insumo = daoInsumo.pesquisar(Insumo.class, Integer.parseInt( req.getParameter("codigoinsumo") ) ) ;
				
				//et.commit() ;
				
			}						
			
			entrada = (Entrada)req.getSession().getAttribute("entrada") ;
			
			if (entrada == null) entrada = new Entrada();
			
			ItemEntrada itemEntrada = new ItemEntrada();
			itemEntrada.setEntrada(entrada);
			itemEntrada.setInsumo( insumo ) ;
			itemEntrada.setQuantidade( req.getParameter("quantidadeitementrada").equals("") ? null : Util.strToDouble( req.getParameter("quantidadeitementrada") ) ) ;
			itemEntrada.setValor( req.getParameter("valorinsumo").equals("") ? null : Util.strToDouble( req.getParameter("valorinsumo") ) ) ;
			
			entrada.addItemEntrada(itemEntrada) ;

			String retorno = "" ;
			
			for (ItemEntrada item : entrada.getItemEntrada()){
				
				retorno += "<div style=\"background-color: #7C7C7C;\">"+
	            		   "<div id=\"labelinsumo\">" + item.getInsumo().getDescricao() + "</div>" +
	            		   "<div id=\"labelquantidade\">" + item.getQuantidade() + "</div>" +
	            		   "<div id=\"labelvalor\">" + Util.doubleToStr( item.getValor() ) + "</div></div>"+
	            		   "<div style=\"float:left; margin-left:5px;\" onclick=\"if (window.confirm('Confirma remover o item ?')) carregardiv('EntradaAction.do!remover?codigoinsumo=" + insumo.getCodigo() +"', 'detalhe'); \"><img src='images/del.jpg' alt='Exluir Registro' border='0'/>&nbsp;</img></div>" ;
			 	 
			}

			req.getSession().setAttribute("entrada", entrada);
			
			if (!retorno.equals(""))
			   resp.getWriter().write(retorno);
			
		}catch(Exception e){
			resp.getWriter().write("erro" + e.getMessage() );
			if ( et != null && et.isActive())
				et.rollback() ;
		}
		
	}
	
	public void remover(HttpServletRequest req, HttpServletResponse resp)
			throws Exception{
		
		try{
					
			entrada = (Entrada)req.getSession().getAttribute("entrada") ;
		
			ItemEntrada itemEntrada = new ItemEntrada();
			itemEntrada.setEntrada(entrada);
			itemEntrada.setInsumo( new Insumo( req.getParameter("codigoinsumo").equals("") ? null : Integer.parseInt(req.getParameter("codigoinsumo")) ));
		
			entrada.removerItemEntrada(itemEntrada);
		
			String retorno = "" ;
		
			for (ItemEntrada item : entrada.getItemEntrada()){
			
				retorno += "<div style=\"background-color: #7C7C7C;\">"+
            		   	   "<div id=\"labelinsumo\">" + item.getInsumo().getDescricao() + "</div>" +
            		   	   "<div id=\"labelquantidade\">" + item.getQuantidade() + "</div>" +
            		   	   "<div id=\"labelvalor\">" + Util.doubleToStr( item.getValor() ) + "</div></div>"+
            		   	   "<div style=\"float:left; margin-left:5px;\" onclick=\"if (window.confirm('Confirma remover o item ?')) carregardiv('EntradaAction.do!remover?codigoinsumo=" + item.getInsumo().getCodigo() +"', 'detalhe'); \"><img src='images/del.jpg' alt='Exluir Registro' border='0'/>&nbsp;</img></div>" ;
		 	 
			}

			req.getSession().setAttribute("entrada", entrada);
		
			resp.getWriter().write(retorno);
		}catch(Exception e){
			resp.getWriter().write("erro" + e.getMessage() );
		}
		
	}
	
	public void cancelar(HttpServletRequest req, HttpServletResponse resp)
			throws Exception{
		
		try{
			
			em = JpaUtil.openEntityManager();
			et = em.getTransaction();

		    et.begin();
			
			et.rollback();
			
	   		JpaUtil.closeEntityManager();
			
			
		}catch(Exception e){
			e.printStackTrace();
		}
		
	}
	
}

Se alguém puder me ajudar... por favor... é urgente!!!

valeu!!!

1 Resposta

C

Alguém ??? Por Favor Me Ajudem!!!

Criado 7 de janeiro de 2008
Ultima resposta 9 de jan. de 2008
Respostas 1
Participantes 1