Re:Hibernate Annotations

3 respostas
plentz

http://www.hibernate.org/hib_docs/annotations/reference/en/html_single/#entity-mapping-association

:wink:

3 Respostas

Fabio_Kung

Solução fácil pra vc:

@Entity
public class Prova {
  (...)

  @OneToMany(cascade=CascadeType.ALL, mappedBy="prova")
  private List<Questao> questoes;

  (...)
}

e

public class Questao {
  (...)

  @ManyToOne
  private Prova prova;

  (...)
}

Só isso! Não tem segredo. Tá lá na documentação do hibernate: “bidirecional relationships”(ou algo do gênero).

N

Olá pessoal,

Estou levando uma surra pra fazer uma coisa simples no hibernate.
Um país tem vários estados.

Na classe País tem uma lista de estados, e na classe Estado tem uma referência a país.

Então, o que eu gostaria de fazer, é que quando eu populasse uma classe Páis, com todos os seus estados, e desse um save(país), ele percorresse toda a lista de estados e fosse salvando imediatamente. E na hora de dar uma load(país), retornasse todos os estados do país.

O problema está sendo como dizer isso ao hibernate usando annotations?

Valeu

N

Olá Diego,

Eu devo estar fazendo algo de muito errado, pq não está dando certo aqui. Aliás, ele insere, mas no banco os id's estão errados (a resposta não está fazendo referencia a questão correta).

Código aqui em baixo. Main
ProvaTO p = new ProvaTO();
        p.setProva("Alguma prova");

        QuestaoTO q = new QuestaoTO();
        q.setQuestao("Alguma questao");
        q.setProva(p);

        List<QuestaoTO> l1 = new ArrayList<QuestaoTO>();
        l1.add(q);
        p.setQuestoes(l1);

        RespostaTO r = new RespostaTO();
        r.setQuestao(q);
        r.setResposta("Resposta");

        List<RespostaTO> l = new ArrayList<RespostaTO>();
        l.add(r);
        q.setRespostas(l);

        new ProvaHibernateDAO().save(p);
ProvaTO
@Entity
@Table(name = "prova")
public class ProvaTO implements Cloneable, Serializable {

    @Id
    @Column(name = "id_prova", length = 10)
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    private String prova;

    @OneToMany(cascade=CascadeType.ALL)
    @JoinColumn(name="id_questao")
    private List<QuestaoTO> questoes;
QuestaoTO
@Entity
@Table(name = "questao")
public class QuestaoTO implements Serializable, Cloneable {

    @Id
    @Column(name = "id_questao", length = 10)
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @Column(name = "questao", length = 10000)
    private String questao;

    @ManyToOne
    @JoinColumn(name = "id_prova", insertable = true)
    private ProvaTO prova;

     @OneToMany(cascade=CascadeType.ALL)
     @JoinColumn(name="id_resposta")
    private List<RespostaTO> respostas;
RespostaTO
@Entity
@Table(name = "resposta")
public class RespostaTO implements Serializable, Cloneable {

    @Id
    @Column(name = "id_resposta", length = 10)
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @ManyToOne
    @JoinColumn(name = "id_questao")
    private QuestaoTO questao;

    @Column(name = "resposta", length = 10000)
    private String resposta;

Pois é, o problema é uma questão que tem uma resposta por ex. Quando inseri a resposta, insere com o id_questão diferente da questão que foi inserida.

Uma coisa estranha que eu vi aqui no log do hibermate, é que ele insere a prova, depois insere uma questão, e depois a resposta. Depois disso, ele dá um update na questão, e um update na resposta. Alguém pode explicar o pq disso? E o pq não está fazendo a referencia correta?

Muito Obrigado!
Valeu!

Criado 23 de junho de 2006
Ultima resposta 24 de jun. de 2006
Respostas 3
Participantes 3