Você está na página 1de 23

Mapeamento

O-R com JPA

Nelson Ion de Oliveira

Estratgias de gerao de Chave primria Mapeamentos Bsicos


@Table @Column @Lob @Temporal @Transient @Basic @Enumerated

O valor de chave primria pode ser denida manualmente ou gerada pelo provedor de persistncia. Tipos possveis:
Qualquer Mpo primiMvo Java Wrappers de Mpos primiMvos Arrays de Mpos primiMvos e Wrappers Tipos numricos grandes Java.lang.String Tipos temporais Java Uma classe de chave primria composta

Anotao idenMca um EnMty no banco de dados. Exemplo:


Chave primria denida manualmente.

@En/ty public class Aluno implements Serializable { @Id private int id; }

Uma aplicao pode denir uma das 4 estratgias de gerao de chaves primrias.
AUTO; TABLE SEQUENCE ou IDENTITY
O provedor de persistncia uMliza sua prpria estratgia (tabelas ou seqncia) para gerar os IDs. Isto requer privilgios que freqentemente restrito aos DBAs.

Exemplo:
Estratgia AUTO

@En/ty public class Aluno implements Serializable { @Id @GenerateValue(strategy=Genera/onType.AUTO) private int id; }

Alguns bancos suportam como chave primria uma coluna de auto-incremento. Exemplo:
@En/ty public class Aluno implements Serializable { @Id @GenerateValue(strategy=Genera/onType.IDENTITY) private int id; }
Estratgia IDENTITY Nesse Mpo de estratgia, na maioria dos SGDBs, no possvel acessar o valor do ID at que a transao seja nalizada. Tambm um valor automMco, assim como a estratgia AUTO.

Gerao uMlizando TABLE.... Exemplo:

o l e d Mo lt u a f e D

@En/ty public class Aluno implements Serializable { @Id @GenerateValue(strategy=Genera/onType.TABLE) private int id; }
O provedor assume um tabela default

Essa estratgia pode ser uMlizada em qualquer Mpo de banco de dados. Indica que o provedor de persistncia deve atribuir as chaves primrias para a enMdade atravs de uma tabela de banco de dados subjacente para garanMr a exclusividade.

Gerao uMlizando TABLE.... Exemplo: @En/ty

da a e Nom

@TableGenerator pode ser anotado em atributos, classes ou mtodos

@TableGenerator(name=Aluno_Gen, table=ID_GEN, pkColumnName=GEN_NAME, valueColumnName=GEN_VAL) public class Aluno implements Serializable { @Id @GenerateValue(strategy=GeneraMonType.TABLE, generator=Aluno_Gen) private int id; }
ID_GEN
GEN_NAME Aluno_Gen GEN_VAL 0

Gerao uMlizando SEQUNCIA... Exemplo:


@En/ty public class Aluno implements Serializable { @Id @GenerateValue(strategy=Genera/onType.SEQUENCE) private int id; }
O provedor uMliza uma seqncia default

o l e d Mo lt u a f e D

Este Mpo de estratgia depende da uMlizao de seqncias por parte do SGBD.

Gerao uMlizando SEQUNCIA.... Exemplo:


@En/ty @SequenceGenerator(name=Aluno_SeqGen, sequenceName=GEN_VAL) public class Aluno implements Serializable { @Id @GenerateValue(strategy=GeneraMonType.SEQUENCE, generator=Aluno_SeqGen) private int id; }

da a e Nom

Anotao a nvel de classe para tratar PrimaryKey compostas.


Classe de Chave Primria
public class ClientePK implements Serializable { private String sobreNome; private Long rg; public ClientePK(){} ..... Obrigatrio //Gets and Sets..... public boolean equal(Object o) {...} public int hashCode() {...} }

Classe da En7dade
@EnMty @IdClass(ClientePK.class) public class Cliente implements Serializable { @Id private String sobreNome; @Id private Long rg; private String nome; //Gets and Sets }

Tratar PK composta embu/ndo a classe PK dentro da enMdade.


Classe de Chave Primria
@Embeddable public class ClientePK implements Serializable { private String sobreNome; private Long rg; public ClientePK(){} ..... //Gets and Sets..... public boolean equal(Object o) {...} public int hashCode() {...} }

Classe da En7dade
@EnMty public class Cliente implements Serializable { private String nome; @EmbeddedId private ClientePK pk; //Gets and Sets }

Informa ao En7tyManager a tabela relacional para qual sua classe EnMty mapeada. Exemplo:

@En/ty @Table(name=TB_ALUNO) public class Aluno implements Serializable { // cdigo da enMdade }

Descreve a maneira como um atributo do EnMty mapeado para uma coluna da tabela. Exemplo:
@En/ty public class Aluno implements Serializable { @Column(name=ALU_NOME) private String nome; @Column(name=ALU_SOBRENOME) private String sobreNome; }

Usado para mapear propriedades persistentes. UMlizado quando se deseja realizar o carregamento sobre demanda (LAZY) ou imediatamente (EAGER). Exemplo: @EnMty
public class Cliente implements Serializable { @Basic(fetch=FetchType.LAZY) private Byte[] arquivo; }

UMlizado quando no se deseja que o atributo seja persisMdo.


@EnMty public class Cliente implements Serializable { private Date dataNasc; @Transient private int idade; public byte getIdade(){ .... } }

Permite mapear os Mpos de objetos (java.u7l.Date e java.u7l.Calendar) para DATE, TIME e TIMESTAMP.
@EnMty public class Cliente implements Serializable { private long Id; @Temporal(TemporalType.TIME) private java.uMl.Date MmeCreated; // GETs and SETs }

UMlizado para representar propriedades persistentes que exigem muita memria. Tipos JDBC especiais
Java.sql.Blob Java.sql.Clob

Anotaes com @Lob so persisMdos em um:


Blob, se o 7po java for byte[], Byte[] ou Serializable; Clob, se o 7po java for char[], Character[] ou String;

Exemplo
import com.acme.imaging.JPEG @EnMty public class Cliente implements Serializable { @Id private long Id; private String name; @Lob @Basic(fetch=FetchType.LAZY) private JPEG photo; // GETs and SETs }

Tipos enum Java podem ser mapeados para a representao de String ou Nmero ordinal. Exemplo: @EnMty
public enum TypeClient{ REGISTRADO, NAOREGISTRADO } public class Cliente implements Serializable { @Id private long Id; private String name; @Enumerated(EnumType.STRING) private TypeClient type; // GETs and SETs }

1. Crie uma enMdade simples (Ex.: Carro [id, placa, Mpo] e aplique a esta as 4 formas de gerao de chave primria.
Observe a forma de gerao para o SGBD instalado em sua mquina.

2. Crie uma enMdade de chave primaria composta e testes a duas formas possveis, em JPA, de represent-la.

hpp://www.objectdb.com/java/jpa

Você também pode gostar