sábado, 6 de setembro de 2014

Relacionamento OneToOne

Confesso que sempre me confundo um pouco com os relacionamentos do Hibernate, por isso hoje vou falar do Relacionamento @OneToOne (com annotation) e posteriormente sobre os demais.

Relacionamento convencional @OneToOne

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 Endereço em um relacionamento convencional um-para-um é declarado da seguinte forma:

package testes;
import javax.persistence.*;
@Entity
public class Pessoa {
@Id@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String nome;
@OneToOne(cascade = CascadeType.ALL)
private Endereco endereco;
//get's e set's
}

package testes; 
import javax.persistence.*;
@Entity
public class Endereco { 
@Id@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String logradouro;
@OneToOne(mappedBy = "endereco")
private Pessoa pessoa;
//get's e set's
}

O annotaion @OneToOne(mappedBy = "endereco") serve para indicar um relacionamento bidirecional, informando que Endereço é o final do relacionamento entre Pessoa-Endereço e que é mapeado em Pessoa pelo atributo endereço. Ou seja, a tabela Pessoa terá a chave estrangeira para Endereço. Com esses Annotations, o Hibernate irá criar duas tabelas: Pessoa e Endereço com os seguintes atributos:

Pessoa
id bigint not null
nome varchar(255)
endereco_id bigint

Endereco
id bigint not null
logradouro varchar(255)

Podemos também declarar um relacionamento unidirecional. Para isso basta não declarar o atributo Pessoa em Endereço:
package testes; 
import javax.persistence.*; 
@Entity
public class Endereco { 
@Id@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String logradouro;
//get's e set's}



Embedded

O relacionamento "embedded one-to-one" trata-se de um relacionamento onde os atributos das entidades relacionadas serão persistidas na mesma tabela.
Por exemplo temos uma classe Pessoa que tem um relacionamento um-para-um com a classe Endereço, esse relacionamento será definido da seguinte forma:

package testes;
import javax.persistence.*;
@Entity
public class Pessoa { 
@Id@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String nome; 
@Embedded
private Endereco endereco;
//get's e set's
}

package testes;
import javax.persistence.Embeddable;
@Embeddable 
public class Endereco {
private String logradouro;
//get's e set's
}

Com esses 'Annotations', o Hibernate irá criar uma tabela Pessoa com os seguintes atributos:

id bigint not nulllogradouro varchar(255)
nome varchar(255)  


Nenhum comentário:

Postar um comentário