Tabela associativa com JPA

0 respostas
J

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&lt;AssDocPessoaPf&gt; 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&lt;AssDocPessoaPf&gt; getAssDocPessoaPfCollection() {
	return this.assDocPessoaPfCollection;
}

public void setAssDocPessoaPfCollection(Set&lt;AssDocPessoaPf&gt; 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&lt;AssDocPessoaPj&gt; assDocPessoaPjCollection;

@OneToMany(mappedBy="idDocPessoa")
private Set&lt;AssDocPessoaPf&gt; 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&lt;AssDocPessoaPj&gt; getAssDocPessoaPjCollection() {
	return this.assDocPessoaPjCollection;
}

public void setAssDocPessoaPjCollection(Set&lt;AssDocPessoaPj&gt; assDocPessoaPjCollection) {
	this.assDocPessoaPjCollection = assDocPessoaPjCollection;
}

public Set&lt;AssDocPessoaPf&gt; getAssDocPessoaPfCollection() {
	return this.assDocPessoaPfCollection;
}

public void setAssDocPessoaPfCollection(Set&lt;AssDocPessoaPf&gt; 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

Criado 25 de junho de 2008
Respostas 0
Participantes 1