Mostrando postagens com marcador Annotation. Mostrar todas as postagens
Mostrando postagens com marcador Annotation. Mostrar todas as postagens

quarta-feira, 12 de novembro de 2014

Princípios de bons Relacionamentos


-O primeiro princípio necessário para a correta utilização dos relacionamentos é: 
Todo relacionamento tem que ter um lado dominante. 
O que quer dizer lado dominante? Qual tabela do banco de dados terá a chave estrangeira. É possível definir o nome da chave estrangeira através da anotação @JoinColum
como no código:

@OneToOne
@JoinColumn(name = "id_nome_chave")

A anotação tem o atributo name para indicar qual deve ser o nome da chave localizada na tabela.


-O segundo princípio a se entender sobre relacionamentos é: 
Pode existir relacionamento Unidirecional ou Bidirecional. 
Um relacionamento unidirecional é o relacionamento em que apenas uma entity conhece a outra; 
E o Bidirecional ambas se conhecem, porém é necessário informar qual é o lado dominante, adicionando o atributo mappedBy no relacionamento que não for dominante.

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)