Upload
tiago-scarrttonn
View
51
Download
0
Embed Size (px)
Citation preview
Mapeamento O-‐R com JPA
Nelson Ion de Oliveira
• Estratégias de geração de Chave primária • Mapeamentos Básicos – @Table – @Column – @Lob – @Temporal – @Transient – @Basic – @Enumerated
• O valor de chave primária pode ser definida manualmente ou gerada pelo provedor de persistência.
• Tipos possíveis: – Qualquer Mpo primiMvo Java – Wrappers de Mpos primiMvos – Arrays de Mpos primiMvos e Wrappers – Tipos numéricos grandes – Java.lang.String – Tipos temporais Java – Uma classe de chave primária composta
• Anotação idenMfica um EnMty no banco de dados.
• Exemplo: Chave primária
definida manualmente.
@En/ty public class Aluno implements Serializable { @Id private int id; }
• Uma aplicação pode definir uma das 4 estratégias de geração de chaves primárias. – AUTO; – TABLE – SEQUENCE – ou IDENTITY
• Exemplo:
O provedor de persistência uMliza sua própria estratégia (tabelas ou seqüência) para gerar os IDs. Isto requer privilégios que freqüentemente é restrito aos DBAs.
Estratégia AUTO
@En/ty public class Aluno implements Serializable { @Id @GenerateValue(strategy=Genera/onType.AUTO) private int id; }
• Alguns bancos suportam como chave primária uma coluna de auto-‐incremento.
• Exemplo:
• Nesse Mpo de estratégia, na maioria dos SGDBs, não é possível acessar o valor do ID até que a transação seja finalizada.
• Também é um valor automáMco, assim como a estratégia AUTO.
@En/ty public class Aluno implements Serializable { @Id @GenerateValue(strategy=Genera/onType.IDENTITY) private int id; }
Estratégia IDENTITY
• Geração uMlizando TABLE.... • Exemplo:
O provedor assume um
tabela default
@En/ty public class Aluno implements Serializable { @Id @GenerateValue(strategy=Genera/onType.TABLE) private int id; }
Essa estratégia pode ser uMlizada em qualquer Mpo de banco de dados. Indica que o provedor de persistência deve atribuir as chaves primárias para a enMdade através de uma tabela de banco de dados subjacente para garanMr a exclusividade.
Modelo
Default
• Geração uMlizando TABLE.... • Exemplo:
@TableGenerator pode ser anotado em atributos,
classes ou métodos
@En/ty @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; }
GEN_NAME GEN_VAL
Aluno_Gen 0
ID_GEN
Nomeada
• Geração uMlizando SEQUÊNCIA... • Exemplo:
Este Mpo de estratégia depende da uMlização de seqüências por parte do SGBD.
O provedor uMliza uma seqüência default
@En/ty public class Aluno implements Serializable { @Id @GenerateValue(strategy=Genera/onType.SEQUENCE) private int id; }
Modelo
Default
• Geração uMlizando SEQUÊNCIA.... • 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; }
Nomeada
• Anotação a nível de classe para tratar PrimaryKey compostas.
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 de Chave Primária
@EnMty @IdClass(ClientePK.class) public class Cliente implements Serializable { @Id private String sobreNome; @Id private Long rg; private String nome; //Gets and Sets }
Classe da En7dade
Obrigatório
• Tratar PK composta embu/ndo a classe PK dentro da enMdade.
@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 de Chave Primária
@EnMty public class Cliente implements Serializable { private String nome; @EmbeddedId private ClientePK pk; //Gets and Sets }
Classe da En7dade
• Informa ao En7tyManager a tabela relacional para qual sua classe EnMty é mapeada.
• Exemplo:
@En/ty @Table(name=“TB_ALUNO”) public class Aluno implements Serializable { // código 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 não 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 memória.
• Tipos JDBC especiais – Java.sql.Blob – Java.sql.Clob
• Anotações com @Lob são 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 representação de String ou Número ordinal.
• Exemplo: @EnMty
public class Cliente implements Serializable { @Id private long Id; private String name; @Enumerated(EnumType.STRING) private TypeClient type;
// GETs and SETs }
public enum TypeClient{ REGISTRADO, NAOREGISTRADO }
1. Crie uma enMdade simples (Ex.: Carro [id, placa, Mpo] e aplique a esta as 4 formas de geração de chave primária. Observe a forma de geração para o SGBD instalado em sua máquina.
2. Crie uma enMdade de chave primaria composta e testes a duas formas possíveis, em JPA, de representá-‐la.
• hpp://www.objectdb.com/java/jpa