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