Transaction not active JPA só atualiza 1 registro

0 respostas
furacao123

Aew galera estou tendo um problema estranho ao dar um persist ou merge no banco de dados

quando tento dar persist ou merge em mais de 1 objeto gera a seguinte exception
Exception in thread "AWT-EventQueue-0" java.lang.IllegalStateException: Transaction not active

CupomFiscalItem

public class CupomFiscalItem implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "id", nullable = false)
    private Integer id;
    @Basic(optional = false)
    @Column(name = "nitem", nullable = false)
    private int nitem;
    @Basic(optional = false)
    @Column(name = "idproduto", nullable = false)
    private int idproduto;
    @Basic(optional = false)
    @Column(name = "descproduto", nullable = false, length = 255)
    private String descproduto;
    @Basic(optional = false)
    @Column(name = "emb", nullable = false, length = 50)
    private String emb;
    @Basic(optional = false)
    @Column(name = "precounit", nullable = false, precision = 9, scale = 2)
    private Double precoUnit;
    @Basic(optional = false)
    @Column(name = "qtd", nullable = false, precision = 9, scale = 3)
    private Double qtd;
    @Basic(optional = false)
    @Column(name = "subtotal", nullable = false, precision = 9, scale = 2)
    private Double subtotal;
    @Basic(optional = false)
    @Column(name = "desconto", nullable = false, precision = 9, scale = 2)
    private Double desconto;
    @Basic(optional = false)
    @Column(name = "acrescimo", nullable = false, precision = 9, scale = 2)
    private Double acrescimo;
    @Basic(optional = false)
    @Column(name = "total", nullable = false, precision = 9, scale = 2)
    private Double total;
    @Basic(optional = false)
    @Column(name = "cancelado", nullable = false)
    private boolean cancelado;
    @Basic(optional = false)
    @Column(name = "sittrib", nullable = false, length = 50)
    private String sitTrib;
    @Basic(optional = false)
    @Column(name = "icms", nullable = false)
    private Double icms;
    @Column(name = "codigobarra", length = 50)
    private String codigobarra;
    @Column(name = "tipodesconto", length = 10)
    private String tipoDesconto = "%";
    @Column(name = "valordesconto", nullable = false, precision = 9, scale = 2)
    private Double valorDesconto = 0.00;

    @JoinColumn(name = "idcupom", referencedColumnName = "id", nullable = false)
    @ManyToOne(optional = false, fetch = FetchType.LAZY)
    private CupomFiscal cupomFiscal;
Metodo onde estou tendo problemas
private void cancelaItem() {

        String nItem = JOptionPane.showInputDialog(null, "Digite o numero do item que deseja excluir.");

        if (impFiscal.cancelaItemGenerico(nItem)) {

            CupomFiscalItem itemCupom = new CupomFiscalItem();
            itemCupom = listItem.get(Integer.parseInt(nItem) - 1);
            itemCupom.setCancelado(true);
            cupomFiscal.setCupomFiscalItemSet(new HashSet<CupomFiscalItem>(listItem));
            cfItemController.grava(itemCupom);

            cupomFiscal.setSubtotal(cupomFiscal.getSubtotal() - itemCupom.getTotal());
            cupomFiscal = cfController.atuliza(cupomFiscal);

            view.getLblValorTotal().setText(ArrangeFields.decimals(cupomFiscal.getSubtotal(), 2, ","));
            VisualizaCupom.cancelaItem(ArrangeFields.codigo(nItem, 3), view.getTxaCupom());
        }
    }
Aqui o metodo genericDao
protected void persistPojo(Serializable pojo) {
        try {
            em.getTransaction().begin();
            em.persist(pojo);//ou em.merge(pojo);
            em.getTransaction().commit();
        } catch (PersistenceException e) {
            JOptionPane.showMessageDialog(null, "Erro na inserção(persist) = " + e);
            em.getTransaction().rollback();
        }
    }
quando eu chamo esse metodo cancelaItem pela primeira vez funciona normal mas se eu tento chamar ele mais de uma vez me gera a exception porque ocorre esse problema?

Na verdade quando a minha listItem tem apenas um objeto CupomFiscalItem eu consigo executar o update no objeto, agora se eu add mais de 1 objeto nela nao consigo mais executar o update

Criado 3 de agosto de 2010
Respostas 0
Participantes 1