setValeuAT do TableModel

Galera estou quebrando a cabeça nisso…
Como faço no meu table model quando tenho 2 campos que são chave estrangeira de outras tabelas?

exemplos, na minha classe pedidos: tenho estoque e clientes que são o ID.

[code]import java.io.Serializable;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;

/**
*

  • @author Caio Fernando
    */
    @Entity
    @Table(name = “pedidos”)
    @NamedQueries({
    @NamedQuery(name = “Pedidos.findAll”, query = “SELECT p FROM Pedidos p”),
    @NamedQuery(name = “Pedidos.findByIdPedidos”, query = “SELECT p FROM Pedidos p WHERE p.idPedidos = :idPedidos”),
    @NamedQuery(name = “Pedidos.findByCliente”, query = “SELECT p FROM Pedidos p WHERE p.cliente = :cliente”),
    @NamedQuery(name = “Pedidos.findByProduto”, query = “SELECT p FROM Pedidos p WHERE p.produto = :produto”),
    @NamedQuery(name = “Pedidos.findByQnt”, query = “SELECT p FROM Pedidos p WHERE p.qnt = :qnt”),
    @NamedQuery(name = “Pedidos.findByValor”, query = “SELECT p FROM Pedidos p WHERE p.valor = :valor”),
    @NamedQuery(name = “Pedidos.findByData”, query = “SELECT p FROM Pedidos p WHERE p.data = :data”),
    @NamedQuery(name = “Pedidos.findByStatus”, query = “SELECT p FROM Pedidos p WHERE p.status = :status”),
    @NamedQuery(name = “Pedidos.findByPago”, query = “SELECT p FROM Pedidos p WHERE p.pago = :pago”)})
    public class Pedidos implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = “IdPedidos”)
    private Integer idPedidos;
    @Basic(optional = false)
    @Column(name = “Cliente”)
    private String cliente;
    @Basic(optional = false)
    @Column(name = “Produto”)
    private String produto;
    @Basic(optional = false)
    @Column(name = “Qnt”)
    private int qnt;
    @Basic(optional = false)
    @Column(name = “Valor”)
    private float valor;
    @Basic(optional = false)
    @Column(name = “Data”)
    private String data;
    @Basic(optional = false)
    @Column(name = “Status”)
    private String status;
    @Basic(optional = false)
    @Column(name = “Pago”)
    private String pago;
    @JoinColumn(name = “CodProduto”, referencedColumnName = “code”)
    @ManyToOne(optional = false)
    private Estoque estoque;
    @JoinColumn(name = “CodCliente”, referencedColumnName = “IdCliente”)
    @ManyToOne(optional = false)
    private Clientes clientes;

    public Pedidos() {
    }

    public Pedidos(Integer idPedidos) {
    this.idPedidos = idPedidos;
    }

    public Pedidos(Integer idPedidos, String cliente, String produto, int qnt, float valor, String data, String status, String pago) {
    this.idPedidos = idPedidos;
    this.cliente = cliente;
    this.produto = produto;
    this.qnt = qnt;
    this.valor = valor;
    this.data = data;
    this.status = status;
    this.pago = pago;
    }

    public Integer getIdPedidos() {
    return idPedidos;
    }

    public void setIdPedidos(Integer idPedidos) {
    this.idPedidos = idPedidos;
    }

    public String getCliente() {
    return cliente;
    }

    public void setCliente(String cliente) {
    this.cliente = cliente;
    }

    public String getProduto() {
    return produto;
    }

    public void setProduto(String produto) {
    this.produto = produto;
    }

    public int getQnt() {
    return qnt;
    }

    public void setQnt(int qnt) {
    this.qnt = qnt;
    }

    public float getValor() {
    return valor;
    }

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

    public String getData() {
    return data;
    }

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

    public String getStatus() {
    return status;
    }

    public void setStatus(String status) {
    this.status = status;
    }

    public String getPago() {
    return pago;
    }

    public void setPago(String pago) {
    this.pago = pago;
    }

    public Estoque getEstoque() {
    return estoque;
    }

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

    public Clientes getClientes() {
    return clientes;
    }

    public void setClientes(Clientes clientes) {
    this.clientes = clientes;
    }

    @Override
    public int hashCode() {
    int hash = 0;
    hash += (idPedidos != null ? idPedidos.hashCode() : 0);
    return hash;
    }

    @Override
    public boolean equals(Object object) {
    // TODO: Warning - this method won’t work in the case the id fields are not set
    if (!(object instanceof Pedidos)) {
    return false;
    }
    Pedidos other = (Pedidos) object;
    if ((this.idPedidos == null && other.idPedidos != null) || (this.idPedidos != null && !this.idPedidos.equals(other.idPedidos))) {
    return false;
    }
    return true;
    }

    @Override
    public String toString() {
    return “sistema.Objetos.Pedidos[idPedidos=” + idPedidos + “]”;
    }

}[/code]

Porém não sei como setar o valor no meu table model.

[code]public Object getValueAt(int linha, int coluna) {

   Pedidos p = (Pedidos) pedidos.get(linha);

   switch (coluna){
         case 0:
      return p.getIdPedidos();
       case 1:
      return p.getCliente();
       case 2:
      return p.getProduto();
       case 3:
      return p.getQnt();
       case 4:
      return p.getValor();
       case 5:
      return p.getData();
       case 6:
      return p.getStatus();
      case 7:
      return p.getPago();
       case 8:
      return p.getClientes();
       case 9:
      return p.getEstoque();
       default:
    return "";
}
}
@Override
public void setValueAt(Object valor, int linha, int coluna) {

    Pedidos p = (Pedidos) pedidos.get(linha);

    switch(coluna){

         case 0:
       p.setIdPedidos(Integer.parseInt(valor.toString()));
       break;

       case 1:
       p.setCliente(valor.toString());
       break;

       case 2:
       p.setProduto(valor.toString());
       break;

       case 3:
        p.setQnt(Integer.parseInt(valor.toString()));
       break;

       case 4:
        p.setStatus(valor.toString());
       break;

       case 5:
    
       p.setData((valor.toString()));
    
       break;

       case 6:
      p.setStatus(valor.toString());
       break;
         case 7:
      p.setPago(valor.toString());
       break;
             case 8:
      p.setClientes(null);// aqui ele pede um objeto do tipo cliente
       break;
              case 9:
      p.setEstoque(null);// aqui ele pede um objeto do tipo estoque

      break;


    }


    fireTableDataChanged();
}[/code]

Amigo,

Tente fazer um cast pro’s tipos requeridos (Clientes e Estoque) por ex:

p.setClientes((Cliente)valor);

É interessante vc nomear suas entidades no singular ( no exemplo acima ficaria Cliente) e deixar o plural p/ atributos do tipo coleções/lista.

Luiz, fiz o seguinte…

view plaincopy to clipboardprint?
case 8:
p.setClientes((Clientes) valor);

case9:
p.setEstoque((Estoque) valor);

Não deu erro na hora de executar, porém na minha jtable na coluna codCliente aparece isso abaixo e não somente os id’s:

sistema.Obejtos.Clientes[idCliente=1]
sistema.Obejtos.Clientes[idCliente=2]
sistema.Obejtos.Clientes[idCliente=2] e assim por diante, e também acontece isso na coluna codProduto.

tentei também colocar e dá erro:
view plaincopy to clipboardprint?
p.setClientes((Clientes) valor.toString()));

Ok, então vc está setando o valor corretamente, ocorre que vc quer que o valor retornado pelo modelo tenha o id do cliente.
Então vc altera o getValueAt p/ retornar o id do Cliente .

Luiz desculpa minha “burrice”…rs

mais teoricamente isso já não estava sendo feito? ou está errado o meu getValue?

[code]// Classe pedidos, onde contém IdCliente e codProduto.
@JoinColumn(name = “CodProduto”, referencedColumnName = “code”)
@ManyToOne(optional = false)
private Estoque estoque;
@JoinColumn(name = “CodCliente”, referencedColumnName = “IdCliente”)
@ManyToOne(optional = false)
private Clientes clientes;

//aqui é no getValueAt
return p.getClientes();
case 9:
return p.getEstoque();[/code]

Não é burrice.

Olha só : lá no getValueAt , vc vai dizer que valores que vão ser exibidos em cada coluna . Só pra exemplificar se vc quizer que saisse a String “NADA” em todas as colunas vc faria o seguinte :

 public Object getValueAt(int linha, int coluna) {  
         return "NADA";

Como vc quer que imprima id do cliente vc faz:

          case 8:  
          return p.getClientes().getId();
           // se fosse o nome seria   return p.getClientes().getNome();

Puts Luiz
Salvou minha lavoura…hehe

Valeu