brother eu utilizo o formulário de amostra e detalhe do net beans, uso um binding para fazer a seleção, veja, vou explicando:
Bom, a
tabela de detalhe tem seus elementos ligados a
tabela mestre ou masterTable, através de um binding, que controla isso para a gente, pela imagem da para enteder que ele pega uma lista de dados do elemento selecionado pela materTable.
A master table da load em uma lista do referente objeto:
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package br.com.contmaismais.beans;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
import javax.persistence.*;
/**
*
* @author Bateria de Jogos
*/
@Entity
@Table(name = "req_cab", catalog = "comercial", schema = "")
@NamedQueries({
@NamedQuery(name = "ReqCab.findAll", query = "SELECT r FROM ReqCab r"),
@NamedQuery(name = "ReqCab.findByCodReqCab", query = "SELECT r FROM ReqCab r WHERE r.codReqCab = :codReqCab"),
@NamedQuery(name = "ReqCab.findByFuncionarioCodFuncionario", query = "SELECT r FROM ReqCab r WHERE r.funcionarioCodFuncionario.codFuncionario = :funcionarioCodFuncionario"),
@NamedQuery(name = "ReqCab.findByDataReqCab", query = "SELECT r FROM ReqCab r WHERE r.dataReqCab = :dataReqCab")})
public class ReqCab implements Serializable {
@Transient
private PropertyChangeSupport changeSupport = new PropertyChangeSupport(this);
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "cod_req_cab")
private int codReqCab;
@JoinColumn(name = "funcionario_cod_funcionario", referencedColumnName="cod_funcionario")
@ManyToOne
private Funcionario funcionarioCodFuncionario;
@Column(name = "data_req_cab")
@Temporal(TemporalType.DATE)
private Date dataReqCab;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "reqCab")
private List<ReqDet> reqDetList;
public ReqCab() {
}
public ReqCab(Integer codReqCab) {
this.codReqCab = codReqCab;
}
public ReqCab(Integer codReqCab, Funcionario funcionarioCodFuncionario) {
this.codReqCab = codReqCab;
this.funcionarioCodFuncionario = funcionarioCodFuncionario;
}
public Integer getCodReqCab() {
return codReqCab;
}
public void setCodReqCab(Integer codReqCab) {
Integer oldCodReqCab = this.codReqCab;
this.codReqCab = codReqCab;
changeSupport.firePropertyChange("codReqCab", oldCodReqCab, codReqCab);
}
public Funcionario getFuncionarioCodFuncionario() {
return funcionarioCodFuncionario;
}
public void setFuncionarioCodFuncionario(Funcionario funcionarioCodFuncionario) {
Funcionario oldFuncionarioCodFuncionario = this.funcionarioCodFuncionario;
this.funcionarioCodFuncionario = funcionarioCodFuncionario;
changeSupport.firePropertyChange("funcionarioCodFuncionario", oldFuncionarioCodFuncionario, funcionarioCodFuncionario);
}
public Date getDataReqCab() {
return dataReqCab;
}
public void setDataReqCab(Date dataReqCab) {
Date oldDataReqCab = this.dataReqCab;
this.dataReqCab = dataReqCab;
changeSupport.firePropertyChange("dataReqCab", oldDataReqCab, dataReqCab);
}
public List<ReqDet> getReqDetList() {
return reqDetList;
}
public void setReqDetList(List<ReqDet> reqDetList) {
this.reqDetList = reqDetList;
}
@Override
public int hashCode() {
int hash = 0;
hash += (codReqCab);
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 ReqCab)) {
return false;
}
ReqCab other = (ReqCab) object;
if ((this.codReqCab == 0 && other.codReqCab != 0)) {
return false;
}
return true;
}
@Override
public String toString() {
return "br.com.contmaismais.beans.ReqCab[ codReqCab=" + codReqCab + " ]";
}
public void addPropertyChangeListener(PropertyChangeListener listener) {
changeSupport.addPropertyChangeListener(listener);
}
public void removePropertyChangeListener(PropertyChangeListener listener) {
changeSupport.removePropertyChangeListener(listener);
}
}
já na tabela de detalhe temos o seguinte objeto:
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package br.com.contmaismais.beans;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
import java.io.Serializable;
import javax.persistence.*;
/**
*
* @author Bateria de Jogos
*/
@Entity
@Table(name = "req_det", catalog = "comercial", schema = "")
@NamedQueries({
@NamedQuery(name = "ReqDet.findAll", query = "SELECT r FROM ReqDet r"),
@NamedQuery(name = "ReqDet.findByReqCabCodReqCab", query = "SELECT r FROM ReqDet r WHERE r.reqCab.codReqCab = :codReqCab"),
@NamedQuery(name = "ReqDet.findByProdutoCodProduto", query = "SELECT r FROM ReqDet r WHERE r.produtoCodProduto.codProduto = :produtoCodProduto"),
@NamedQuery(name = "ReqDet.findByQtdeReqDet", query = "SELECT r FROM ReqDet r WHERE r.qtdeReqDet = :qtdeReqDet"),
@NamedQuery(name = "ReqDet.findByVlrUnitReqDet", query = "SELECT r FROM ReqDet r WHERE r.vlrUnitReqDet = :vlrUnitReqDet"),
@NamedQuery(name = "ReqDet.findByVlrTotalReqDet", query = "SELECT r FROM ReqDet r WHERE r.vlrTotalReqDet = :vlrTotalReqDet"),
@NamedQuery(name = "ReqDet.findByFlag", query = "SELECT r FROM ReqDet r WHERE r.flag = :flag")
})
public class ReqDet implements Serializable {
@Transient
private PropertyChangeSupport changeSupport = new PropertyChangeSupport(this);
private static final long serialVersionUID = 1L;
@Id
@Column(name = "cod_req_det")
private int codReqDet;
@JoinColumn(name = "req_cab_cod_req_cab", referencedColumnName = "cod_req_cab")
@ManyToOne(optional = false)
private ReqCab reqCab;
@JoinColumn(name = "produto_cod_produto", referencedColumnName = "cod_produto")
@ManyToOne(optional=false)
private Produto produtoCodProduto;
@Column(name = "qtde_req_det")
private int qtdeReqDet;
// @Max(value=?) @Min(value=?)//if you know range of your decimal fields consider using these annotations to enforce field validation
@Column(name = "vlr_unit_req_det")
private Double vlrUnitReqDet;
@Column(name = "vlr_total_req_det")
private Double vlrTotalReqDet;
@Column(name = "flag")
private boolean flag;
public boolean getFlag() {
return flag;
}
public void setFlag(boolean flag) {
boolean oldFlag = this.flag;
this.flag = flag;
changeSupport.firePropertyChange("flag", oldFlag, flag);
}
public ReqDet() {
}
public int getCodReqDet() {
return codReqDet;
}
public void setCodReqDet(int codReqDet) {
int oldCodReqDet = this.codReqDet;
this.codReqDet = codReqDet;
changeSupport.firePropertyChange("codReqDet", oldCodReqDet, codReqDet);
}
public Produto getProdutoCodProduto() {
return produtoCodProduto;
}
public void setProdutoCodProduto(Produto produtoCodProduto) {
Produto oldProdutoCodProduto = this.produtoCodProduto;
this.produtoCodProduto = produtoCodProduto;
changeSupport.firePropertyChange("produtoCodProduto", oldProdutoCodProduto, produtoCodProduto);
}
public int getQtdeReqDet() {
return qtdeReqDet;
}
public void setQtdeReqDet(int qtdeReqDet) {
int oldQtdeReqDet = this.qtdeReqDet;
this.qtdeReqDet = qtdeReqDet;
changeSupport.firePropertyChange("qtdeReqDet", oldQtdeReqDet, qtdeReqDet);
}
public Double getVlrUnitReqDet() {
return vlrUnitReqDet;
}
public void setVlrUnitReqDet(Double vlrUnitReqDet) {
Double oldVlrUnitReqDet = this.vlrUnitReqDet;
this.vlrUnitReqDet = vlrUnitReqDet;
changeSupport.firePropertyChange("vlrUnitReqDet", oldVlrUnitReqDet, vlrUnitReqDet);
}
public Double getVlrTotalReqDet() {
return vlrTotalReqDet;
}
public void setVlrTotalReqDet(Double vlrTotalReqDet) {
Double oldVlrTotalReqDet = this.vlrTotalReqDet;
this.vlrTotalReqDet = vlrTotalReqDet;
changeSupport.firePropertyChange("vlrTotalReqDet", oldVlrTotalReqDet, vlrTotalReqDet);
}
public ReqCab getReqCab() {
return reqCab;
}
public void setReqCab(ReqCab reqCab) {
ReqCab oldReqCab = this.reqCab;
this.reqCab = reqCab;
changeSupport.firePropertyChange("reqCab", oldReqCab, reqCab);
}
@Override
public int hashCode() {
int hash = 0;
hash += (codReqDet + reqCab.getCodReqCab());
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 ReqDet)) {
return false;
}
return true;
}
@Override
public String toString() {
return "br.com.contmaismais.beans.ReqDet[ reqCab=" + reqCab + " ]";
}
public void addPropertyChangeListener(PropertyChangeListener listener) {
changeSupport.addPropertyChangeListener(listener);
}
public void removePropertyChangeListener(PropertyChangeListener listener) {
changeSupport.removePropertyChangeListener(listener);
}
}
O métpdo utilizado é uma STRATERGY do binding:
...
org.jdesktop.beansbinding.ELProperty eLProperty = org.jdesktop.beansbinding.ELProperty.create("${selectedElement.reqDetList}");
org.jdesktop.swingbinding.JTableBinding jTableBinding = org.jdesktop.swingbinding.SwingBindings.createJTableBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, masterTable, eLProperty, detailTable);
org.jdesktop.swingbinding.JTableBinding.ColumnBinding columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${produtoCodProduto.codProduto}"));
...