Olá pessoal, estou querendo tirar uma dúvida basica.
A questao é a seguinte: como eu não tenho conhecimento em SQL, aprendi nos cursos da caelum a fazer a classe e gerar o banco atravez do hibernate.
QUando eu vou fazer um relacionamento entre tabelas, ficaria mais ou menos assim:
[code]@Entity @Table(name = “pergunta”)
public class Perguntas {
@Id
@GeneratedValue
@Column(name = "cod_perguntas")
private Long cod_perguntas;
private Long questionario_cod_questionario;//aqui seria meu relacionamento com a tabela questionario (não me perguntem q tipo de relacionamento é esse...)
private String descricao;
[/code]
Só que com o passar do tempo, vi muitos exemplos de outra forma:
[code]@Entity @Table(name = “pergunta”)
public class Perguntas {
Aí pergunto a vcs: QUal a diferença prática? Qual a melhor forma?? Das duas formas eu sei q funcionam, só q da primeira, quando eu gravo no banco, apenas salvo o id relacional no registro… Já na segunda, salvo o nome (String, seria isso mesmo??).
A segunda forma é melhor porque permite que você trabalhe com o objeto e não simplemente com o código identificador.
Isso permite, além de uma programação mais clara e focada nos objetos, algumas otimizações, como pegar os dois objetos em uma mesma consulta ou carregá-lo apenas quando necessário, de acordo com a sua necessidade.
A diferença basica é que, por exemplo, quando vc invocar o metodo getQuestionario em uma entidade gerenciada pelo hibernate, se o relacionamento existir, o objeto já estara populado e carregado para vc, entendeu?
A segunda forma que vc postou é a forma correta de se trabalhar com o hibernate, que faz um mapeamento relacional objeto, logo vc deve trabalhar com os objetos, uma pergunta possui um objeto questionario e não um Long questionario_cod_questionario.
Capitou?
Pergunta p = (Pergunta) session.load(10);
System.out.println(p.getQuestionario().getDescrição());
[quote=ovelha]A diferença basica é que, por exemplo, quando vc invocar o metodo getQuestionario em uma entidade gerenciada pelo hibernate, se o relacionamento existir, o objeto já estara populado e carregado para vc, entendeu?
A segunda forma que vc postou é a forma correta de se trabalhar com o hibernate, que faz um mapeamento relacional objeto, logo vc deve trabalhar com os objetos, uma pergunta possui um objeto questionario e não um Long questionario_cod_questionario.
Capitou?
Pergunta p = (Pergunta) session.load(10);
System.out.println(p.getQuestionario().getDescrição());