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 exceptionException 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;
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());
}
}
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