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???
Jtable salvando no BD
13 Respostas
Voce ja criou a sua classe de persistencia? Se nao, pode começar por ai ^^
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!!!
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
tenho sim!!!
tenho o dao de todas as minhas classes!!!
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.
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!!
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???
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.
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.
criei o meu model e ainda esta com o mesmo erro!!!
gente!!!
me ajudem!!!
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.
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;
}
}
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;
}
}
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