Jtable salvando no BD

13 respostas
R

Boa noite!!!
estou criando um sistema de vendas e na tela vendas tem uma jtable q recebe os produtos e nao to sabendo como salvar esses produtos na venda!!!
alguem me da uma luz???

13 Respostas

carlos.e.a

Voce ja criou a sua classe de persistencia? Se nao, pode começar por ai ^^

R

as classes q tenho sao:
Venda
Produto
eu sei q nesse caso tem q ter a classe Prod_venda
so nao sei q dados coloco nessa classe!!!

carlos.e.a

Nao irmaozinho, acho que voce nao entendeu o que eu quis dizer.
Eu perguntei se voce tinha sua classe de persistencia(no caso VendaDAO).
Vide http://www.guj.com.br/java/66925-implementando-dao

R

tenho sim!!!
tenho o dao de todas as minhas classes!!!

carlos.e.a

Entao voce só precisa obter o modelo da sua jTable(suaJTable.getmodel()) e a partir do modelo voce recupera os dados da jTable. Depois voce joga nos seus daos e é soh felicidade…Lembrando que voce tem que implementar o modelo da sua jTable, ou usar uma implementacao do pessoal aqui do forum, ou usar DefaltTableModel(o que nao é recomendado).Apos implementar voce seta uma instancia da sua implementacao da jTable(acho que com setModel, nao lembro agora) e quando chamar getModel ele vai te devolver uma referencia ao seu modelo.

R

vou colocar aqui o metodo q salva a jtable!!!

public HashSet<Produto> getProdutos(){
			HashSet hs = new HashSet();
			DefaultTableModel dtm = (DefaultTableModel)jTable.getModel();
			for(int i=0; i<dtm.getRowCount();i++){
				hs.add(dtm.getValueAt(i, 0));
			}
			return hs;
	}

esse eh o codigo pra pegar os dados da tabela!!!
e joga num hashset pra salvar mais da erro!!

R

qd mando salvar aquele codigo da esse erro aqui:
Caused by: java.lang.IllegalArgumentException: Can not set java.lang.Integer field modelo.Produto.codigo_p to java.lang.Integer
oq pode ser isso???

carlos.e.a

Voce esta usando DefaultTableModel.É soh esse o problema…acredito que seja problema de cast. Voce esta tentando popular a sua HashSet diretamente com o retorno do DefaultTableModel. Só que o tipo de retorno para todas as colunas de um DefaultTableModel sao Strings e o seu Produto.codigo_p é um Integer.

ViniGodoy

Aprenda a fazer um TableModel para seu produtos
Veja um exemplo aqui:
http://www.guj.com.br/java/225793-exemplo-de-tablemodel#1156821

Ou aqui:
http://www.guj.com.br/java/149034-duvidas-ao-fazer-uma-consulta#808003

Usar o DefaultTableModel, além de mais difícil, é mais lento e ocupa consideravelmente mais memória.

R

criei o meu model e ainda esta com o mesmo erro!!!

R

gente!!!
me ajudem!!!

ViniGodoy

As informações que vc colocou aqui são completamente insuficientes para entendermos seu problema.
Por que você não começa postando o model que criou, a classe de negócio que está usando, o texto completo do erro, etc?

A bola de cristal eu só uso para fazer previsões do futuro, não para adivinhar o que as pessoas fazem. Isso iria ferir a privacidade delas.
Ah, e não precisa me importunar via MP. Recebo uma msg desse tópico sempre que alguém escreve nele.

R
Produto
package modelo;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.ManyToOne;

@Entity
public class Produto {
	@Id
private int codigo_p;
	@Column
private String nome;
	@Column
private Float custo;
	@Column
private int quantidade;
	@ManyToOne
private Fornecedor fornecedor;
	@ManyToOne
private Marca marca;
	@Column
private Float tt_custo;
	
	
	public int getCodigo_p() {
		return codigo_p;
	}
	public void setCodigo_p(int codigo_p) {
		this.codigo_p = codigo_p;
	}
	public Float getCusto() {
		return custo;
	}
	public void setCusto(Float custo) {
		this.custo = custo;
	}
	public Fornecedor getFornecedor() {
		return fornecedor;
	}
	public void setFornecedor(Fornecedor fornecedor) {
		this.fornecedor = fornecedor;
	}
	public Marca getMarca() {
		return marca;
	}
	public void setMarca(Marca marca) {
		this.marca = marca;
	}
	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}
	public int getQuantidade() {
		return quantidade;
	}
	public void setQuantidade(int quantidade) {
		this.quantidade = quantidade;
	}
	public Float getTt_custo() {
		return tt_custo;
	}
	public void setTt_custo(Float tt_custo) {
		this.tt_custo = tt_custo;
	}
}
Venda
package modelo;

import java.util.Date;
import java.util.Set;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
@Entity
public class Venda {
	@Id
	@GeneratedValue(strategy=GenerationType.IDENTITY) 	
private int codigo_v;
	@Column
private String nome;
	@Column
private Float custo;
	@Column
private String fornecedor;
	@Column
private int nota;
	@Column
private Float valvenda;
	@Column
private Date data;
	@Column
private String marca;
	@Column
private Float porc;
	@Column
private Float lucro;
	@ManyToOne
private Pagamento pagamento;
	@ManyToMany(fetch=FetchType.EAGER)
	@JoinTable(name="Venda_Produto", joinColumns=@JoinColumn(name="Id_Venda"),
			inverseJoinColumns=@JoinColumn(name="Id_Produto"))
private Set<Produto> produtos;

public Float getPorc() {
	return porc;
}
public void setPorc(Float porc) {
	this.porc = porc;
}

public Pagamento getPagamento() {
	return pagamento;
}
public void setPagamento(Pagamento pagamento) {
	this.pagamento = pagamento;
}
public String getFornecedor() {
	return fornecedor;
}
public void setFornecedor(String fornecedor) {
	this.fornecedor = fornecedor;
}
public Float getCusto() {
	return custo;
}
public void setCusto(Float custo) {
	this.custo = custo;
}
public String getNome() {
	return nome;
}
public void setNome(String nome) {
	this.nome = nome;
}

public int getCodigo_v() {
	return codigo_v;
}
public void setCodigo_v(int codigo_v) {
	this.codigo_v = codigo_v;
}
public int getNota() {
	return nota;
}
public void setNota(int nota) {
	this.nota = nota;
}
public Float getValvenda() {
	return valvenda;
}
public void setValvenda(Float valvenda) {
	this.valvenda = valvenda;
}
public Date getData() {
	return data;
}
public void setData(Date data) {
	this.data = data;
}
public String getMarca() {
	return marca;
}
public void setMarca(String marca) {
	this.marca = marca;
}
public Float getLucro() {
	return lucro;
}
public void setLucro(Float lucro) {
	this.lucro = lucro;
}

public boolean equals(Object o){
	if(getClass()!=o.getClass())
	{
		return false;
	}
	else
	{if(pagamento.equals(((Venda)o).getPagamento())){
		return true;
	}
	else {
		return false;
	}
}
	
}
public Set<Produto> getProdutos() {
	return produtos;
}
public void setProdutos(Set<Produto> produtos) {
	this.produtos = produtos;
}
}
modeltable
package defaultmodel;


import java.util.ArrayList;
import java.util.List;
import javax.swing.table.AbstractTableModel;
import modelo.Produto;

public class Vendatable extends AbstractTableModel {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private List<Produto> produtos;
	public Vendatable() {
		produtos = new ArrayList<Produto>();
	}
	public Vendatable(List<Produto> listaDeProduto) {
		this();
		produtos.addAll(listaDeProduto);
	}
	@Override
	public Class<?> getColumnClass(int columnIndex) {
		switch (columnIndex) {
		case 0:
			return String.class;
		default:
			throw new IndexOutOfBoundsException("columnIndex out of bounds");
		}
	}
	
	@Override  
    public String getColumnName(int coluna) {  
        switch (coluna) {  
        case 0:  
            return "Codigo";
        default:  
            return "";
        }  
    }  
	public int getRowCount() {
		return produtos.size();
	}

	public Object getValueAt(int linha, int coluna) {
		Produto produto = produtos.get(linha);
		switch (coluna) {
		case 0:
			return produto.getCodigo_p();
		default:
			return null;
		}
	}
	
	
	
	public void setValueAt(Object valor, int linha, int coluna) {
		
		Produto p = produtos.get(linha);
		switch (coluna) {  
        case 0:  
            p.setCodigo_p(Integer.parseInt(valor.toString())); // mudamos o nome  
            break;  
        }  
        fireTableDataChanged();  
    }  
	
	public void adiciona(Produto socio) {
		produtos.add(socio);
		fireTableRowsInserted(produtos.size() - 1, produtos.size() - 1);  
	}
	public void removeSocio(int indiceLinha) {	
		produtos.remove(indiceLinha);
		fireTableRowsDeleted(indiceLinha, indiceLinha);
	}
	
	public void addListaDeSocios(List<Produto> lista) {
		int i = produtos.size();
		produtos.addAll(lista);
		fireTableRowsInserted(i, i+ lista.size());
	}
	public void limpar() {
		int i = produtos.size();
		produtos.clear();
		fireTableRowsDeleted(0, i - 1);
	}
	
	
	public boolean isCellEditable(int rowIndex, int columnIndex) {
		return false;
	}
	public Produto getSocio(int indiceLinha) {
		return produtos.get(indiceLinha);
	}
	public int getColumnCount() {
		return 1;
	}
	
}

metodo para pegar da tabela

public HashSet getProdutos(){
		HashSet hs = new HashSet();
		model =(Vendatable) jTable.getModel();
		for(int i=0; i<model.getRowCount();i++){
			hs.add(model.getValueAt(i, 0));
		}
		return hs;
}

Erro:
org.hibernate.PropertyAccessException: could not get a field value by reflection getter of modelo.Produto.codigo_p
at org.hibernate.property.DirectPropertyAccessor$DirectGetter.get(DirectPropertyAccessor.java:58)
at org.hibernate.tuple.entity.AbstractEntityTuplizer.getIdentifier(AbstractEntityTuplizer.java:206)
at org.hibernate.persister.entity.AbstractEntityPersister.getIdentifier(AbstractEntityPersister.java:3619)
at org.hibernate.persister.entity.AbstractEntityPersister.isTransient(AbstractEntityPersister.java:3335)
at org.hibernate.engine.ForeignKeys.isTransient(ForeignKeys.java:204)
at org.hibernate.engine.ForeignKeys.getEntityIdentifierIfNotUnsaved(ForeignKeys.java:241)
at org.hibernate.type.EntityType.getIdentifier(EntityType.java:430)
at org.hibernate.type.ManyToOneType.nullSafeSet(ManyToOneType.java:101)
at org.hibernate.persister.collection.AbstractCollectionPersister.writeElement(AbstractCollectionPersister.java:777)
at org.hibernate.persister.collection.AbstractCollectionPersister.recreate(AbstractCollectionPersister.java:1165)
at org.hibernate.action.CollectionRecreateAction.execute(CollectionRecreateAction.java:58)
at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:279)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:263)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:171)
at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:50)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1027)
at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:365)
at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:137)
at DAO.DAOVenda.cadastrar(DAOVenda.java:32)
at controle.ControleVenda.actionPerformed(ControleVenda.java:217)
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.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.lang.IllegalArgumentException: Can not set int field modelo.Produto.codigo_p to java.lang.Integer
at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(Unknown Source)
at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(Unknown Source)
at sun.reflect.UnsafeFieldAccessorImpl.ensureObj(Unknown Source)
at sun.reflect.UnsafeIntegerFieldAccessorImpl.getInt(Unknown Source)
at sun.reflect.UnsafeIntegerFieldAccessorImpl.get(Unknown Source)
at java.lang.reflect.Field.get(Unknown Source)
at org.hibernate.property.DirectPropertyAccessor$DirectGetter.get(DirectPropertyAccessor.java:55)
... 45 more
org.hibernate.PropertyAccessException: could not get a field value by reflection getter of modelo.Produto.codigo_p
at org.hibernate.property.DirectPropertyAccessor$DirectGetter.get(DirectPropertyAccessor.java:58)
at org.hibernate.tuple.entity.AbstractEntityTuplizer.getIdentifier(AbstractEntityTuplizer.java:206)
at org.hibernate.persister.entity.AbstractEntityPersister.getIdentifier(AbstractEntityPersister.java:3619)
at org.hibernate.persister.entity.AbstractEntityPersister.isTransient(AbstractEntityPersister.java:3335)
at org.hibernate.engine.ForeignKeys.isTransient(ForeignKeys.java:204)
at org.hibernate.engine.ForeignKeys.getEntityIdentifierIfNotUnsaved(ForeignKeys.java:241)
at org.hibernate.type.EntityType.getIdentifier(EntityType.java:430)
at org.hibernate.type.ManyToOneType.nullSafeSet(ManyToOneType.java:101)
at org.hibernate.persister.collection.AbstractCollectionPersister.writeElement(AbstractCollectionPersister.java:777)
at org.hibernate.persister.collection.AbstractCollectionPersister.recreate(AbstractCollectionPersister.java:1165)
at org.hibernate.action.CollectionRecreateAction.execute(CollectionRecreateAction.java:58)
at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:279)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:263)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:171)
at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:50)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1027)
at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:365)
at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:137)
at DAO.DAOVenda.cadastrar(DAOVenda.java:32)
at controle.ControleVenda.actionPerformed(ControleVenda.java:217)
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.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.lang.IllegalArgumentException: Can not set int field modelo.Produto.codigo_p to java.lang.Integer
at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(Unknown Source)
at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(Unknown Source)
at sun.reflect.UnsafeFieldAccessorImpl.ensureObj(Unknown Source)
at sun.reflect.UnsafeIntegerFieldAccessorImpl.getInt(Unknown Source)
at sun.reflect.UnsafeIntegerFieldAccessorImpl.get(Unknown Source)
at java.lang.reflect.Field.get(Unknown Source)
at org.hibernate.property.DirectPropertyAccessor$DirectGetter.get(DirectPropertyAccessor.java:55)
... 45 more

Criado 26 de junho de 2011
Ultima resposta 3 de jul. de 2011
Respostas 13
Participantes 3