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
[code]@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 ;
[/code]
ItemEntrada
[code]@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;
[/code]
essa é minha classe de controle, toda requisição do Entrada.JSP passa por ela:
[code]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'/> </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'/> </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'/> </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'/> </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();
}
}
}
[/code]
Se alguém puder me ajudar… por favor… é urgente!!!
valeu!!!