Auto-relacionamento no Hibernate - [Era: Ajuda Urgente!]

5 respostas
S

Pessoal preciso de uma ajudinha com hibernate…
Eh o seguinte:
Tenho uma classe chamada PagamentoVariavel q representa uma tabela PGTO_VARIAVEL com auto-relacionamento (1-n), ou seja, um pagamento eh dividido em prazos maiores q 1. Bom, nessa classe tem um atributo PagamentoVariavel pagamentoOrigem q representa o pagamento de origem de um conjunto de pagamentos. Preciso de um metodo q me retorne todos pagamentos especificando um pagamento de origem. Como faço isso???
Dêem uma olhada na classe:

public class PagamentoVariavel extends SimVersionedEntity {

    private boolean processado = false;
    private Contrato contrato;
    private Rubrica rubrica;
    private Mes mes;
    private Short ano, prazo, sequencia;
    private Double valor;
    private String observacao;
    private PagamentoVariavel pagamentoOrigem;
    private Pensionista pensionista;

    public boolean isProcessado() {
        return processado;
    }

    public void setProcessado(boolean processado) {
        this.processado = processado;
    }

    public Contrato getContrato() {
        return contrato;
    }

    public void setContrato(Contrato contrato) {
        this.contrato = contrato;
    }

    public Rubrica getRubrica() {
        return rubrica;
    }

    public void setRubrica(Rubrica rubrica) {
        this.rubrica = rubrica;
    }

    public Mes getMes() {
        return mes;
    }

    public void setMes(Mes mes) {
        this.mes = mes;
    }

    public Short getAno() {
        return ano;
    }

    public void setAno(Short ano) {
        this.ano = ano;
    }

    public Short getPrazo() {
        return prazo;
    }

    public void setPrazo(Short prazo) {
        this.prazo = prazo;
    }

    public Short getSequencia() {
        return sequencia;
    }

    public void setSequencia(Short sequencia) {
        this.sequencia = sequencia;
    }

    public Double getValor() {
        return valor;
    }

    public void setValor(Double valor) {
        this.valor = valor;
    }

    public String getObservacao() {
        return observacao;
    }

    public void setObservacao(String observacao) {
        this.observacao = observacao;
    }

    public PagamentoVariavel getPagamentoOrigem() {
        return pagamentoOrigem;
    }

    public void setPagamentoOrigem(PagamentoVariavel pagamentoOrigem) {
        this.pagamentoOrigem = pagamentoOrigem;
    }

    public Pensionista getPensionista() {
        return pensionista;
    }

    public void setPensionista(Pensionista pensionista) {
        this.pensionista = pensionista;
    }

    public boolean equals(Object o) {
        if (this == o) return true;
        if (!(o instanceof PagamentoVariavel)) return false;

        final PagamentoVariavel pgto = (PagamentoVariavel) o;
        if (contrato != null ? !contrato.equals(pgto.contrato) : pgto.contrato != null) return false;
        if (rubrica != null ? !rubrica.equals(pgto.rubrica) : pgto.rubrica != null) return false;
        if (ano != null ? !ano.equals(pgto.ano) : pgto.ano != null) return false;
        if (mes != null ? !mes.equals(pgto.mes) : pgto.mes != null) return false;
        if (prazo != null ? !prazo.equals(pgto.prazo) : pgto.prazo != null) return false;
        if (sequencia != null ? !sequencia.equals(pgto.sequencia) : pgto.sequencia != null) return false;
        if (pensionista != null ? !pensionista.equals(pgto.pensionista) : pgto.pensionista != null) return false;

        return true;
    }

    public int hashCode() {
        int result = (contrato != null ? contrato.hashCode() : 0);
        result = 29 * result + (rubrica != null ? rubrica.hashCode() : 0);
        result = 29 * result + (ano != null ? ano.hashCode() : 0);
        result = 29 * result + (mes != null ? mes.hashCode() : 0);
        result = 29 * result + (prazo != null ? prazo.hashCode() : 0);
        result = 29 * result + (sequencia != null ? sequencia.hashCode() : 0);
        result = 29 * result + (pensionista != null ? pensionista.hashCode() : 0);
        return result;
    }
}

Uma superclasse dessa contém o atributo id.

[ ]'s a todos!!!

5 Respostas

Luca

Olá

Ajuda urgente? Tente 190!

Mas se seu caso é algo relacionado a Java, então descreva sua dúvida no título do tópico.

[]s
Luca

Z

Itere sobre todos os pagamentos (while, for, …), verificando se os pagamentos de origem são iguais ao pagamento especificado, e vá adicionando em uma List, por exemplo. Depois é só retornar o List.

Em uma modelagem melhor, os objetos “pai” teriam uma coleção (List, Set, Map, …) de objetos “filho”.

Mauricio_Linhares

Se elas se relacionam em 1:N, mapeie um <set> e um <many-to-one> dentro da mesma classe.

Partindo da classe pai, você vai poder navegar dentro do grafo em todas as classes filhas.

http://www.hibernate.org/hib_docs/v3/reference/en/html/associations.html#assoc-bidirectional-m21

Z

Mas lembre-se de criar o Set de classes “filhas” na classe. :mrgreen:

P

também estou tendo problemas com auto relacionamento.
System.out.println("ANTES: "+listaEquipeTrabalhoSuperiores.size());

CadEquipeTrabalho t = dao.consultar(2L, false);
		
			if(t.getSgEquipe()== t.getCadEquipeTrabalho().getCadEquipeTrabalho().getSgEquipe()){
				System.out.println("ERRO");
				
			}
			else{
				
				System.out.println("CORRETO");
				System.out.println("Equipe superior: "+t.getCadEquipeTrabalho().getCadEquipeTrabalho().getSgEquipe());
								
				t.setSgEquipe(t.getCadEquipeTrabalho().getCadEquipeTrabalho().getSgEquipe());
				setListaEquipeTrabalhoSuperiores(t.getCadEquipeTrabalhos());
				System.out.print("TESTANDO---->");
				System.out.println(t.getSgEquipe());
				System.out.println("DEPOIS: "+listaEquipeTrabalhoSuperiores.size());
							
			}

ele entra no if só que na hora de setar a lista com a equipe superior e ele set com a equipe atual e não com a equipe superior alguem poderia dar uma ajuda?

Criado 21 de junho de 2005
Ultima resposta 24 de jul. de 2007
Respostas 5
Participantes 5