Olá!
Estou com problemas para conseguir buscar dados armazenados em uma tabela associativa, usando JPA. A consulta realizada retorna a pessoa física, mas o Set para a listagem de documentos (que deveria vir da tabela associativa ASS_DOC_PESSOA_PF) volta nulo.
As classes são as seguintes:
import java.io.Serializable;
import java.sql.Date;
import java.util.Set;
import javax.persistence.Column;
import javax.persistence.Entity;
import <a href="http://javax.persistence.Id">javax.persistence.Id</a>;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
@Entity
@Table(name=“PESSOA_FISICA”)
public class PessoaFisica implements Serializable {
@Id
@Column(name=“ID_PESSOA_FISICA”)
private int idPessoaFisica;
@ManyToOne
@JoinColumn(name="ID_PAIS")
private Pais idPais;
@Column(name="DAT_INC_REGISTRO")
private Date datIncRegistro;
@Column(name="NOM_PESSOA")
private String nomPessoa;
@Column(name="DAT_NASCIMENTO")
private Date datNascimento;
@Column(name="IND_SEXO")
private String indSexo;
@Column(name="TPO_ESTADO_CIVIL")
private String tpoEstadoCivil;
@Column(name="DSC_PROFISSAO")
private String dscProfissao;
@Column(name="TPO_CORRESPONDENCIA")
private String tpoCorrespondencia;
@OneToMany(mappedBy="idPessoaFisica")
private Set<AssDocPessoaPf> assDocPessoaPfCollection;
private static final long serialVersionUID = 1L;
public PessoaFisica() {
super();
}
public int getIdPessoaFisica() {
return this.idPessoaFisica;
}
public void setIdPessoaFisica(int idPessoaFisica) {
this.idPessoaFisica = idPessoaFisica;
}
public Pais getIdPais() {
return this.idPais;
}
public void setIdPais(Pais idPais) {
this.idPais = idPais;
}
public Date getDatIncRegistro() {
return this.datIncRegistro;
}
public void setDatIncRegistro(Date datIncRegistro) {
this.datIncRegistro = datIncRegistro;
}
public String getNomPessoa() {
return this.nomPessoa;
}
public void setNomPessoa(String nomPessoa) {
this.nomPessoa = nomPessoa;
}
public Date getDatNascimento() {
return this.datNascimento;
}
public void setDatNascimento(Date datNascimento) {
this.datNascimento = datNascimento;
}
public String getIndSexo() {
return this.indSexo;
}
public void setIndSexo(String indSexo) {
this.indSexo = indSexo;
}
public String getTpoEstadoCivil() {
return this.tpoEstadoCivil;
}
public void setTpoEstadoCivil(String tpoEstadoCivil) {
this.tpoEstadoCivil = tpoEstadoCivil;
}
public String getDscProfissao() {
return this.dscProfissao;
}
public void setDscProfissao(String dscProfissao) {
this.dscProfissao = dscProfissao;
}
public String getTpoCorrespondencia() {
return this.tpoCorrespondencia;
}
public void setTpoCorrespondencia(String tpoCorrespondencia) {
this.tpoCorrespondencia = tpoCorrespondencia;
}
public Set<AssDocPessoaPf> getAssDocPessoaPfCollection() {
return this.assDocPessoaPfCollection;
}
public void setAssDocPessoaPfCollection(Set<AssDocPessoaPf> assDocPessoaPfCollection) {
this.assDocPessoaPfCollection = assDocPessoaPfCollection;
}
@Override
public boolean equals(Object obj)
{
if (obj == null || !(obj instanceof PessoaFisica))
{
return false;
}
PessoaFisica pf = (PessoaFisica)obj;
return pf.getIdPessoaFisica() == this.getIdPessoaFisica();
}
@Override
public int hashCode(){
return Integer.valueOf(this.getIdPessoaFisica()).hashCode()*3;
}
}
import java.io.Serializable;
import java.sql.Date;
import java.util.Set;
import javax.persistence.Column;
import javax.persistence.Entity;
import <a href="http://javax.persistence.Id">javax.persistence.Id</a>;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
@Entity
@Table(name=“DOCUMENTO_PESSOA”)
public class DocumentoPessoa implements Serializable {
@Id
@Column(name=“ID_DOC_PESSOA”)
private long idDocPessoa;
@Column(name="NRO_DOC_PESSOA")
private String nroDocPessoa;
@ManyToOne
@JoinColumn(name="ID_ORGAO_EXPEDIDOR")
private OrgaoExpedidor idOrgaoExpedidor;
@ManyToOne
@JoinColumn(name="ID_TPO_DOC_PESSOA")
private TpoDocumento idTpoDocPessoa;
@Column(name="DAT_EMISSAO")
private Date datEmissao;
@OneToMany(mappedBy="idDocPessoa")
private Set<AssDocPessoaPj> assDocPessoaPjCollection;
@OneToMany(mappedBy="idDocPessoa")
private Set<AssDocPessoaPf> assDocPessoaPfCollection;
private static final long serialVersionUID = 1L;
public DocumentoPessoa() {
super();
}
public long getIdDocPessoa() {
return this.idDocPessoa;
}
public void setIdDocPessoa(long idDocPessoa) {
this.idDocPessoa = idDocPessoa;
}
public String getNroDocPessoa() {
return this.nroDocPessoa;
}
public void setNroDocPessoa(String nroDocPessoa) {
this.nroDocPessoa = nroDocPessoa;
}
public OrgaoExpedidor getIdOrgaoExpedidor() {
return this.idOrgaoExpedidor;
}
public void setIdOrgaoExpedidor(OrgaoExpedidor idOrgaoExpedidor) {
this.idOrgaoExpedidor = idOrgaoExpedidor;
}
public TpoDocumento getIdTpoDocPessoa() {
return this.idTpoDocPessoa;
}
public void setIdTpoDocPessoa(TpoDocumento idTpoDocPessoa) {
this.idTpoDocPessoa = idTpoDocPessoa;
}
public Date getDatEmissao() {
return this.datEmissao;
}
public void setDatEmissao(Date datEmissao) {
this.datEmissao = datEmissao;
}
public Set<AssDocPessoaPj> getAssDocPessoaPjCollection() {
return this.assDocPessoaPjCollection;
}
public void setAssDocPessoaPjCollection(Set<AssDocPessoaPj> assDocPessoaPjCollection) {
this.assDocPessoaPjCollection = assDocPessoaPjCollection;
}
public Set<AssDocPessoaPf> getAssDocPessoaPfCollection() {
return this.assDocPessoaPfCollection;
}
public void setAssDocPessoaPfCollection(Set<AssDocPessoaPf> assDocPessoaPfCollection) {
this.assDocPessoaPfCollection = assDocPessoaPfCollection;
}
@Override
public boolean equals(Object obj)
{
if(! (obj instanceof DocumentoPessoa))
return false;
DocumentoPessoa doc = (DocumentoPessoa) obj;
return doc.getIdDocPessoa() == this.idDocPessoa;
}
@Override
public int hashCode()
{
return (new Long(this.idDocPessoa)).hashCode();
}
}
DocumentoPessoa e PessoaFisica se relacionam através da associativa:
import java.io.Serializable;
import java.sql.Date;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
@Entity
@Table(name=“ASS_DOC_PESSOA_PF”)
public class AssDocPessoaPf implements Serializable {
@EmbeddedId
private AssDocPessoaPfPK pk;
@ManyToOne(cascade=CascadeType.ALL)
@JoinColumn(name="ID_PESSOA_FISICA",referencedColumnName="ID_PESSOA_FISICA")
private PessoaFisica idPessoaFisica;
@Column(name="DAT_INC_REGISTRO")
private Date datIncRegistro;
@Column(name="DAT_DESASSOCIACAO")
private Date datDesassociacao;
@ManyToOne(cascade=CascadeType.ALL)
@JoinColumn(name="ID_DOC_PESSOA", referencedColumnName="ID_DOC_PESSOA")
private DocumentoPessoa idDocPessoa;
private static final long serialVersionUID = 15634L;
public AssDocPessoaPf() {
super();
}
public PessoaFisica getIdPessoaFisica() {
return this.idPessoaFisica;
}
public void setIdPessoaFisica(PessoaFisica idPessoaFisica) {
this.idPessoaFisica = idPessoaFisica;
}
public Date getDatIncRegistro() {
return this.datIncRegistro;
}
public void setDatIncRegistro(Date datIncRegistro) {
this.datIncRegistro = datIncRegistro;
}
public Date getDatDesassociacao() {
return this.datDesassociacao;
}
public void setDatDesassociacao(Date datDesassociacao) {
this.datDesassociacao = datDesassociacao;
}
/**
* @return the pk
*/
public AssDocPessoaPfPK getPk() {
return pk;
}
/**
* @param pk the pk to set
*/
public void setPk(AssDocPessoaPfPK pk) {
this.pk = pk;
}
/**
* @return the idDocPessoa
*/
public DocumentoPessoa getIdDocPessoa() {
return idDocPessoa;
}
/**
* @param idDocPessoa the idDocPessoa to set
*/
public void setIdDocPessoa(DocumentoPessoa idDocPessoa) {
this.idDocPessoa = idDocPessoa;
}
@Override
public boolean equals(Object obj)
{
if(! (obj instanceof AssDocPessoaPf))
return false;
AssDocPessoaPf aPf = (AssDocPessoaPf) obj;
return aPf.getPk() == this.pk;
}
@Override
public int hashCode()
{
return this.pk.hashCode();
}
}
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Embeddable;
@SuppressWarnings(“serial”)
@Embeddable
public class AssDocPessoaPfPK implements Serializable {
@Column(name="ID_DOC_PESSOA")
private int idDocPessoa;
@Column(name="ID_PESSOA_FISICA")
private int idPessoaFisica;
public AssDocPessoaPfPK() {
super();
}
/**
* @return the idPessoaFisica
*/
public int getIdPessoaFisica() {
return idPessoaFisica;
}
/**
* @param idPessoaFisica the idPessoaFisica to set
*/
public void setIdPessoaFisica(int idPessoaFisica) {
this.idPessoaFisica = idPessoaFisica;
}
/**
* @return the idDocPessoa
*/
public int getIdDocPessoa() {
return idDocPessoa;
}
/**
* @param idDocPessoa the idDocPessoa to set
*/
public void setIdDocPessoa(int idDocPessoa) {
this.idDocPessoa = idDocPessoa;
}
@Override
public boolean equals(Object obj)
{
if(! (obj instanceof AssDocPessoaPfPK))
return false;
AssDocPessoaPfPK AssDocPessoaPfPK = (AssDocPessoaPfPK) obj;
return AssDocPessoaPfPK.getIdDocPessoa() == this.idDocPessoa && AssDocPessoaPfPK.getIdPessoaFisica() == this.idPessoaFisica;
}
@Override
public int hashCode()
{
return (new Integer(this.idDocPessoa)).hashCode() | (new Integer(this.idPessoaFisica)).hashCode();
}
}
Já tentamos usar Fetch.EAGER, mas ocorre PersistenceException na hora de pegar o resultado da query.
Qualquer ajuda é bem-vinda!
Obrigada