Baixa de Estoque

Ola gente tentei fazer uma baixa no estoque ao efetuar venda porem nao deu certo porque sera?
uso apenas um botao para fazer isso.Acredito que devo estar bem perto de resolução.

segue codigo botao

botao2.addActionListener(new ActionListener() {       
        public void actionPerformed(ActionEvent e) {       
			// TODO add your handling code here: 
        	int entrada_saida =0;
        	Produto p = new Produto();
        	Connection conexao = null;
			try {
				conexao = DriverManager.getConnection(
				          "jdbc:postgresql:TurmaN40","postgres", "33462634");
				System.out.println("Conectado!");
    	        conexao.close();
			} catch (SQLException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}
        	      
            for (int i = 0; i < modelo.getRowCount(); i ++ )
            {
                VendaProduto it = new VendaProduto();
                it.setCodigo(Integer.parseInt(String.valueOf(modelo.getValueAt(i, 0))));
                it.setData(f.getSelectedDate());
                it.setNomevendedor(String.valueOf(modelo.getValueAt(i, 2)));
                it.setDescricao(String.valueOf(modelo.getValueAt( i ,3)));
                it.setQtde(Integer.parseInt(String.valueOf(modelo.getValueAt( i ,4))));
                it.setValor(Double.parseDouble(String.valueOf(modelo.getValueAt( i ,5))));
                it.setTotal(Double.parseDouble(String.valueOf(modelo.getValueAt( i ,6))));
                
    			ListarVendas l = new ListarVendas(fabricaDeEntidades, gerenciador);

                gerenciador.getTransaction().begin();
                gerenciador.persist(it);
                gerenciador.getTransaction().commit();
                
                entrada_saida = it.getQtde() - p.getEstoque();
                
                PreparedStatement psm = null;
            	try {
					psm = conexao.prepareStatement(
							"UPDATE Produto SET codproduto =? , categoria =? , data =? , descricao  =?,"
									+ " estoque = ? , fornecedor = ?, marca = ?, referencia = ?, valor = ? WHERE codproduto = ?");
				} catch (SQLException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}

            }

                }

});

segue tabela produto

package Modelo;

import java.util.Calendar;

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

@Entity
public class Produto {
@Id
private int codproduto;

private String fornecedor;

private String descricao;

private String referencia;

private String  marca;

private String categoria;

private int estoque;
@Temporal(TemporalType.DATE)
private Calendar data;

private Double valor;

public String getCategoria() {
	return categoria;
}

public void setCategoria(String categoria) {
	this.categoria = categoria;
}


public int getCodproduto() {
	return codproduto;
}

public void setCodproduto(int codproduto) {
	this.codproduto = codproduto;
}

public Calendar getData() {
	return data;
}

public void setData(Calendar data) {
	this.data = data;
}

public String getDescricao() {
	return descricao;
}

public void setDescricao(String descricao) {
	this.descricao = descricao;
}

public int getEstoque() {
	return estoque;
}

public void setEstoque(int estoque) {
	this.estoque = estoque;
}

public String getMarca() {
	return marca;
}

public void setMarca(String marca) {
	this.marca = marca;
}

public String getReferencia() {
	return referencia;
}

public void setReferencia(String referencia) {
	this.referencia = referencia;
}

public Double getValor() {
	return valor;
}

public void setValor(Double valor) {
	this.valor = valor;
}

public String getFornecedor() {
	return fornecedor;
}

public void setFornecedor(String fornecedor) {
	this.fornecedor = fornecedor;
}

}

segue tabela venda produto

package Modelo;
import java.util.Calendar;
import java.util.Date;

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.swing.table.DefaultTableModel;

@Entity
public class VendaProduto {
@Id
private int codigo;
private String descricao;
private int qtde;
private double valor;
private double total;
private int itens;
private String nomevendedor;
@Temporal(TemporalType.DATE)
private Calendar data;

public int getCodigo() {
	return codigo;
}
public void setCodigo(int codigo) {
	this.codigo = codigo;
}
public String getDescricao() {
	return descricao;
}
public void setDescricao(String string) {
	this.descricao = string;
}
public int getQtde() {
	return qtde;
}
public void setQtde(int qtde) {
	this.qtde = qtde;
}
public double getTotal() {
	return total;
}
public void setTotal(double total) {
	this.total = total;
}
public double getValor() {
	return valor;
}
public void setValor(double valor) {
	this.valor = valor;
}
public int getItens() {
	return itens;
}
public void setItens(int itens) {
	this.itens = itens;
}
public Calendar getData() {
	return data;
}
public void setData(Calendar data) {
	this.data = data;
}
public String getNomevendedor() {
	return nomevendedor;
}
public void setNomevendedor(String nomevendedor) {
	this.nomevendedor = nomevendedor;
}
	
}

ola gente alterei o codigo do botao e agora esta dando estes erros

Segue codigo alterado

botao2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// TODO add your handling code here:
int entrada_saida =0;
Produto p = new Produto();
Connection conexao = null;
try {
conexao = DriverManager.getConnection(
“jdbc:postgresql:TurmaN40”,“postgres”, “33462634”);
System.out.println(“Conectado!”);
conexao.close();
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}

            for (int i = 0; i < modelo.getRowCount(); i ++ )
            {
                VendaProduto it = new VendaProduto();
                it.setCodigo(Integer.parseInt(String.valueOf(modelo.getValueAt(i, 0))));
                it.setData(f.getSelectedDate());
                it.setNomevendedor(String.valueOf(modelo.getValueAt(i, 2)));
                it.setDescricao(String.valueOf(modelo.getValueAt( i ,3)));
                it.setQtde(Integer.parseInt(String.valueOf(modelo.getValueAt( i ,4))));
                it.setValor(Double.parseDouble(String.valueOf(modelo.getValueAt( i ,5))));
                it.setTotal(Double.parseDouble(String.valueOf(modelo.getValueAt( i ,6))));
                
    			ListarVendas l = new ListarVendas(fabricaDeEntidades, gerenciador);

                gerenciador.getTransaction().begin();
                gerenciador.persist(it);
                gerenciador.getTransaction().commit();
                
                entrada_saida = it.getQtde() - p.getEstoque();
                
                PreparedStatement psm = null;
            	try {
					psm = conexao.prepareStatement(
							"UPDATE Produto SET codproduto =? , categoria =? , data =? , descricao  =?,"
									+ " estoque = ? , fornecedor = ?, marca = ?, referencia = ?, valor = ? WHERE codproduto = ?");
					psm.setInt(1, p.getCodproduto());
					psm.setString(2, p.getCategoria());
					psm.setString(3, converteData(p.getData()));
					psm.setString(4, p.getDescricao());
					psm.setInt(5, p.getEstoque());
					psm.setString(6, p.getFornecedor());
					psm.setString(7, p.getMarca());
					psm.setString(8, p.getReferencia());
					psm.setString(9,p.getValor() + "");
					psm.execute();
					psm.close();
				} catch (SQLException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}

            }

                }
    	private String converteData(Calendar data) {
			// TODO Auto-generated method stub
			return new SimpleDateFormat("dd/MM/yyyy").format(new Date().getTime());
		}
	});

Segue erros

Hibernate: insert into VendaProduto (data, descricao, itens, nomevendedor, qtde, total, valor, codigo) values (?, ?, ?, ?, ?, ?, ?, ?)

  • SQL Error: 0, SQLState: 23505
  • Entrada em lote 0 insert into VendaProduto (data, descricao, itens, nomevendedor, qtde, total, valor, codigo) values (2017-05-13 -03:00, sabao, 0, joao, 3, 12.0, 4.0, 4) foi abortada. Chame getNextException para ver a causa.
  • SQL Error: 0, SQLState: 23505
  • ERROR: duplicate key value violates unique constraint "vendaproduto_pkey"
    Detalhe: Key (codigo)=(4) already exists.
  • Could not synchronize database state with session
    org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update
    at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:71)
    at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
    at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:253)
    at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:237)
    at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:141)
    at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:298)
    at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
    at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000)
    at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:338)
    at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106)
    at org.hibernate.ejb.TransactionImpl.commit(TransactionImpl.java:54)
    at EfetuarVenda$2.actionPerformed(EfetuarVenda.java:265)
    at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
    at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
    at java.awt.Component.processMouseEvent(Unknown Source)
    at javax.swing.JComponent.processMouseEvent(Unknown Source)
    at java.awt.Component.processEvent(Unknown Source)
    at java.awt.Container.processEvent(Unknown Source)
    at java.awt.Component.dispatchEventImpl(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Window.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
    at java.awt.EventQueue.access$500(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue$4.run(Unknown Source)
    at java.awt.EventQueue$4.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)
    Caused by: java.sql.BatchUpdateException: Entrada em lote 0 insert into VendaProduto (data, descricao, itens, nomevendedor, qtde, total, valor, codigo) values (2017-05-13 -03:00, sabao, 0, joao, 3, 12.0, 4.0, 4) foi abortada. Chame getNextException para ver a causa.
    at org.postgresql.jdbc2.AbstractJdbc2Statement$BatchResultHandler.handleError(AbstractJdbc2Statement.java:2510)
    at org.postgresql.core.v3.QueryExecutorImpl$1.handleError(QueryExecutorImpl.java:393)
    at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1341)
    at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:341)
    at org.postgresql.jdbc2.AbstractJdbc2Statement.executeBatch(AbstractJdbc2Statement.java:2573)
    at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:48)
    at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:246)
    … 45 more
    Exception in thread “AWT-EventQueue-0” javax.persistence.RollbackException: Error while commiting the transaction
    at org.hibernate.ejb.TransactionImpl.commit(TransactionImpl.java:71)
    at EfetuarVenda$2.actionPerformed(EfetuarVenda.java:265)
    at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
    at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
    at java.awt.Component.processMouseEvent(Unknown Source)
    at javax.swing.JComponent.processMouseEvent(Unknown Source)
    at java.awt.Component.processEvent(Unknown Source)
    at java.awt.Container.processEvent(Unknown Source)
    at java.awt.Component.dispatchEventImpl(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Window.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
    at java.awt.EventQueue.access$500(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue$4.run(Unknown Source)
    at java.awt.EventQueue$4.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)
    Caused by: org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update
    at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:71)
    at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
    at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:253)
    at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:237)
    at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:141)
    at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:298)
    at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
    at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000)
    at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:338)
    at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106)
    at org.hibernate.ejb.TransactionImpl.commit(TransactionImpl.java:54)
    … 37 more
    Caused by: java.sql.BatchUpdateException: Entrada em lote 0 insert into VendaProduto (data, descricao, itens, nomevendedor, qtde, total, valor, codigo) values (2017-05-13 -03:00, sabao, 0, joao, 3, 12.0, 4.0, 4) foi abortada. Chame getNextException para ver a causa.
    at org.postgresql.jdbc2.AbstractJdbc2Statement$BatchResultHandler.handleError(AbstractJdbc2Statement.java:2510)
    at org.postgresql.core.v3.QueryExecutorImpl$1.handleError(QueryExecutorImpl.java:393)
    at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1341)
    at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:341)
    at org.postgresql.jdbc2.AbstractJdbc2Statement.executeBatch(AbstractJdbc2Statement.java:2573)
    at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:48)
    at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:246)
    … 45 more
    Hibernate: select vendaprodu0_.codigo as codigo18_, vendaprodu0_.data as data18_, vendaprodu0_.descricao as descricao18_, vendaprodu0_.itens as itens18_, vendaprodu0_.nomevendedor as nomevend5_18_, vendaprodu0_.qtde as qtde18_, vendaprodu0_.total as total18_, vendaprodu0_.valor as valor18_ from VendaProduto vendaprodu0_ where vendaprodu0_.data=?

Essa é a parte importante:

Há uma unique constraint nessa tabela, provavelmente envolvendo o número da venda e o número do produto. Ela impede que um mesmo produto seja cadastrado para uma mesma venda. Dê uma olhada se essa regra está correta e se você não está passando produtos repetidos para uma mesma venda.

Abraço.