Hibernate Exception "More than one row with the given identifier was found" RESOLVIDO

1 resposta
atilaraphael

Olá pessoal, estou utilizando o hibernate para fazer a conexão com o bd, só que hoje fui fazer uma consulta e o hibernate me retornou este erro.

[color=red]org.hibernate.HibernateException: More than one row with the given identifier was found: 1, for class: model.ProcessoFinanciamento[/color]

Pelo que eu entendi, ele encontrou mais de um resultado com o identificador passado para ele.

Entenda o Caso:

Tenho a classe ProcessoFinanciamento; esta classe tem um relacionamento com a classe Vendedor e um uma lista de ProcessoFinanciamentoComprador e esta tem um relacionamento com a classe Comprador.

Problema:

Quando seleciono um ProcessoFinaciamento que tenha apenas um ProcessoFinanciamentoComprador (apenas um comprador), funciona perfeitamente. Já quando seleciono um ProcessoFinanceamento que tem mais de um ProcessoFinanciamentoComprador (mais de um comprador), ele dá o erro citado acima.

Questão:

O que posso fazer para me livrar deste erro?

Classe ProcessoFinanciamento.

@Entity
@Table(name = "processo_financiamento")
public class ProcessoFinanciamento implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Long codigo;
    @Basic(optional = false)
    @Column(name = "data_processo")
    @Temporal(TemporalType.DATE)
    private Date dataProcesso;
    @Column(name = "observacoes_doc_vendedor_imovel")
    private String observacoesDocVendedorImovel;

    private Double valorCompraVenda;

    private Double valorFinanciamento;

    private Double volorEntrada;

    private Double volorFgts;

    @JoinColumn(name = "usuario", referencedColumnName = "codigo")
    @ManyToOne(optional = false)
    private Usuario usuario;

    @JoinColumn(name = "vendedor", referencedColumnName = "codigo")
    @ManyToOne(optional = false)
    private Vendedor vendedor;

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "processoFinanciamento")
    private List<ProcessoFinanciamentoComprador> processosFinanciamentoComprador;
Classe ProcessoFinanciamentoComprador.
@Entity
@Table(name = "processo_financiamento_comprador")
public class ProcessoFinanciamentoComprador implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long codigo;
    @JoinColumn(name = "comprador", referencedColumnName = "codigo")
    @ManyToOne(optional = false)
    private Comprador comprador;
    
    @JoinColumn(name = "processo_financiamento", referencedColumnName = "codigo")
    @ManyToOne(optional = false)
    private ProcessoFinanciamento processoFinanciamento;

    @Column(name = "observacoes_documento_comprador")
    private String observacoesDocumentoComprador;
Classe Comprador.
@Entity
@Table(name = "comprador")
public class Comprador implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Long codigo;

    @Column(name = "nome", nullable=false)
    private String nome;
    
    @Column(name = "cpf", nullable=false)
    private String cpf;
    
    @Column(name = "data_nascimento", nullable=false)
    @Temporal(TemporalType.DATE)
    private Date dataNascimento;

    private String email;

    @Column(name = "estado_civil")
    private String estadoCivil;

    @Column(name = "grau_instrucao")
    private String grauInstrucao;

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "comprador")
    private List<ProcessoFinanciamentoComprador> processosFinanciamentoComprador;
Método que faz a seleção:
public ProcessoFinanciamento getObject(ProcessoFinanciamento t) throws Exception {
        try {
            this.setSessao(this.getSessionFactory().openSession());

            Criteria c = this.getSessao().createCriteria(ProcessoFinanciamento.class)
                    .add(Restrictions.idEq(t.getCodigo()));

            return (ProcessoFinanciamento) c.uniqueResult();

        } finally {
            this.getSessao().close();
        }
    }

1 Resposta

atilaraphael

Bem galera, não sei bem o que era, mas eu exclui o banco de dados e criei novamente e o erro sumiu.

Criado 17 de maio de 2011
Ultima resposta 17 de mai. de 2011
Respostas 1
Participantes 1