Embedded
O relacionamento "embedded one-to-one" trata-se de um relacionamento onde os atributos das entidades relacionadas serão persistidas na mesma tabela.No exemplo temos uma classe Pessoa que tem um relacionamento um-para-um com a classe Endereco.
O relacionamento é definido da seguinte forma:
package myexample; import javax.persistence.*; @Entity public class Pessoa { @Id private long id; private String nome; @Embedded private Endereco endereco; //get's e set's }
package myexample; import javax.persistence.Embeddable; @Embeddable public class Endereco { private String logradouro; //get's e set's }Com esses annotations, o hibernate irá criar (pesquise por hbm2ddl do Hibernate Tools no Google) uma tabela Pessoa com os seguintes atributos:
Relacionamento convencional one-to-one
O relacionamento convencional um-para-um trata-se de um relacionamento onde os atributos das entidades relacionadas serão persistidas em tabelas distintas.O relacionamento das classes Pessoa e Endereco em um relacionamento convencional um-para-um é declarado da seguinte forma:
package myexample; import javax.persistence.*; @Entity public class Pessoa { @Id private long id; private String nome; @OneToOne(cascade = CascadeType.ALL) private Endereco endereco; //get's e set's }
package myexample; import javax.persistence.*; @Entity public class Endereco { @Id private long id; private String logradouro; @OneToOne(mappedBy = "endereco") private Pessoa pessoa; }O annotaion @OneToOne(mappedBy = "endereco") serve para indicar um relacionamento bidirecional, informando que Endereco é o final do relacionamento entre Pessoa-Endereco e que é mapeado em Pessoa pelo atributo endereco.
Ou seja, a tabela Pessoa terá a chave estrangeira para Endereco.
Com esses annotations, o hibernate irá criar duas tabelas: Pessoa e Endereco com os seguintes atributos:
Pessoa
Endereco
Devo salientar que não é obrigatório declarar esse relacionamento bidirecional. Ele pode ser unidirecional. Para isso basta não declarar o atributo Pessoa em Endereco:
package myexample; import javax.persistence.*; @Entity public class Endereco { @Id private long id; private String logradouro; }
simples e eficiente sua explicação. parabéns!
ResponderExcluir