Bom Dia Pessoal.
Eu estou com um problema no Hibernate em relaçao a um campo que é FK, e esse campo FK aponta pra propria tabela. Quando faço uma HQL mandando buscar pelo campo Número da tabela, a HQL faz o JOIN com ela mesma.
Por exemplo, tenho o Codigo 1, mas nesse campo que a FK aponta pra ela mesma ta null, o hibernate me retorna esse campo null com o codigo 1. Assim tenho uma linha com dados duplicados.
O campo q referencia a propria entidade é esse
. To desesperado se alguem puder ajudar!!!
@OneToOne(fetch=FetchType.LAZY)
@JoinColumn(name="autin_codigo", /*referencedColumnName="autin_substituido_por", columnDefinition="autin_substituido_por"*/ referencedColumnName="autin_substituido_por")
private AutoInfracaoAmbiental autoInfracaoAmbientalSubstituicao;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
@NamedQueries({
@NamedQuery(name="buscaPorNumeroAIA", query="SELECT A FROM AutoInfracaoAmbiental A WHERE A.autoInfracaoAmbientalNumero = :numero")
})
@Entity
@Table(name="auto_infracao")
@SequenceGenerator(name="seq_auto_infracao", sequenceName="seq_auto_infracao")
public class AutoInfracaoAmbiental implements Serializable{
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(generator="seq_auto_infracao")
@Column(name="autin_codigo", nullable=false)
private Integer autoInfracaoAmbientalCodigo;
@OneToOne(fetch=FetchType.EAGER)
@JoinColumn(name="docto_codigo")
private Documento autoInfracaoAmbientalDocumento;
@Column(name="autin_numero", nullable=false)
private Integer autoInfracaoAmbientalNumero;
@ManyToOne(fetch=FetchType.EAGER)
@JoinColumn(name="autin_autuado", nullable=false)
private Pessoa autoInfracaoAmbientalAutuado;
@ManyToOne(fetch=FetchType.EAGER)
@JoinColumn(name="end_codigo", nullable=false)
private Endereco autoInfracaoAmbientalEndereco;
@Temporal(TemporalType.DATE)
@Column(name="autin_data_infracao", nullable=false)
private Date autoInfracaoAmbientalDataInfracao;
@ManyToOne(fetch=FetchType.EAGER)
@JoinColumn(name="cafis_codigo", nullable=false)
private CategoriaFiscalizacao autoInfracaoAmbientalCategoriaFiscalizacao;
@Column(name="autin_indicativo_multa_inicial", nullable=false, precision=2)
private BigDecimal autoInfracaoAmbientalMultaInicial;
@Column(name="autin_indicativo_multa_final", nullable=false, precision=2)
private BigDecimal autoInfracaoAmbientalMultaFinal;
@Column(name="autin_descricao", nullable=false)
private String autoInfracaoAmbientalDescricao;
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="notam_codigo", nullable=true, insertable=false, updatable=false)
private NotificacaoAmbiental autoInfracaoAmbientalNotificacaoAmbiental;
@Column(name="autin_aia_codigo")
private Integer autoInfracaoAmbientalCodigoNNA;
@Temporal(TemporalType.DATE)
@Column(name="autin_data_recebimento", nullable=false)
private Date autoInfracaoAmbientalDataRecebimento;
@OneToOne(fetch=FetchType.LAZY)
@JoinColumn(name="autin_codigo", /*referencedColumnName="autin_substituido_por", columnDefinition="autin_substituido_por"*/ referencedColumnName="autin_substituido_por")
private AutoInfracaoAmbiental autoInfracaoAmbientalSubstituicao;
@ManyToOne(fetch=FetchType.EAGER)
@JoinColumn(name="autin_autuado_preposto", nullable=false)
private Pessoa autoInfracaoAmbientalAutuadoPreposto;
@ManyToOne(fetch=FetchType.EAGER)
@JoinColumn(name="autin_testemunha1", nullable=false)
private Pessoa autoInfracaoAmbientalTestemunha1;
@ManyToOne(fetch=FetchType.EAGER)
@JoinColumn(name="autin_testemunha2", nullable=false)
private Pessoa autoInfracaoAmbientalTestemunha2;
@ManyToOne(fetch=FetchType.EAGER)
@JoinColumn(name="autin_agente_fiscal", nullable=false)
private Pessoa autoInfracaoAmbientalAgenteFiscal;
@OneToOne(fetch=FetchType.EAGER)
@JoinColumn(name="procf_codigo", nullable=true)
private ProcessoFiscalizacao autoInfracaoAmbientalProcessoFiscalizacao;
@Column(name="autin_observacao")
private String autoInfracaoAmbientalObservacao;
@ManyToMany(fetch=FetchType.LAZY,cascade={CascadeType.MERGE, CascadeType.PERSIST})
@JoinTable(name="documento_enquadramento",
joinColumns={@JoinColumn(name="docto_codigo", nullable=false, referencedColumnName="docto_codigo")},
inverseJoinColumns={@JoinColumn(name="enqua_codigo", nullable=false)})
private List<Enquadramento> autoInfracaoAmbientalEnquadramentos;