07 - Mapeamento O-R Com JPA
-
Upload
tiago-scarrttonn -
Category
Documents
-
view
38 -
download
0
Transcript of 07 - Mapeamento O-R Com JPA
![Page 1: 07 - Mapeamento O-R Com JPA](https://reader033.fdocument.pub/reader033/viewer/2022042511/55cf9dbb550346d033aeeee2/html5/thumbnails/1.jpg)
Mapeamento O-‐R com JPA
Nelson Ion de Oliveira
![Page 2: 07 - Mapeamento O-R Com JPA](https://reader033.fdocument.pub/reader033/viewer/2022042511/55cf9dbb550346d033aeeee2/html5/thumbnails/2.jpg)
• Estratégias de geração de Chave primária • Mapeamentos Básicos – @Table – @Column – @Lob – @Temporal – @Transient – @Basic – @Enumerated
![Page 3: 07 - Mapeamento O-R Com JPA](https://reader033.fdocument.pub/reader033/viewer/2022042511/55cf9dbb550346d033aeeee2/html5/thumbnails/3.jpg)
• 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
![Page 4: 07 - Mapeamento O-R Com JPA](https://reader033.fdocument.pub/reader033/viewer/2022042511/55cf9dbb550346d033aeeee2/html5/thumbnails/4.jpg)
• 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; }
![Page 5: 07 - Mapeamento O-R Com JPA](https://reader033.fdocument.pub/reader033/viewer/2022042511/55cf9dbb550346d033aeeee2/html5/thumbnails/5.jpg)
• 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; }
![Page 6: 07 - Mapeamento O-R Com JPA](https://reader033.fdocument.pub/reader033/viewer/2022042511/55cf9dbb550346d033aeeee2/html5/thumbnails/6.jpg)
• 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
![Page 7: 07 - Mapeamento O-R Com JPA](https://reader033.fdocument.pub/reader033/viewer/2022042511/55cf9dbb550346d033aeeee2/html5/thumbnails/7.jpg)
• 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
![Page 8: 07 - Mapeamento O-R Com JPA](https://reader033.fdocument.pub/reader033/viewer/2022042511/55cf9dbb550346d033aeeee2/html5/thumbnails/8.jpg)
• 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
![Page 9: 07 - Mapeamento O-R Com JPA](https://reader033.fdocument.pub/reader033/viewer/2022042511/55cf9dbb550346d033aeeee2/html5/thumbnails/9.jpg)
• 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
![Page 10: 07 - Mapeamento O-R Com JPA](https://reader033.fdocument.pub/reader033/viewer/2022042511/55cf9dbb550346d033aeeee2/html5/thumbnails/10.jpg)
• 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
![Page 11: 07 - Mapeamento O-R Com JPA](https://reader033.fdocument.pub/reader033/viewer/2022042511/55cf9dbb550346d033aeeee2/html5/thumbnails/11.jpg)
• 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
![Page 12: 07 - Mapeamento O-R Com JPA](https://reader033.fdocument.pub/reader033/viewer/2022042511/55cf9dbb550346d033aeeee2/html5/thumbnails/12.jpg)
• 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
![Page 13: 07 - Mapeamento O-R Com JPA](https://reader033.fdocument.pub/reader033/viewer/2022042511/55cf9dbb550346d033aeeee2/html5/thumbnails/13.jpg)
• 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 }
![Page 14: 07 - Mapeamento O-R Com JPA](https://reader033.fdocument.pub/reader033/viewer/2022042511/55cf9dbb550346d033aeeee2/html5/thumbnails/14.jpg)
• 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; }
![Page 15: 07 - Mapeamento O-R Com JPA](https://reader033.fdocument.pub/reader033/viewer/2022042511/55cf9dbb550346d033aeeee2/html5/thumbnails/15.jpg)
• 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; }
![Page 16: 07 - Mapeamento O-R Com JPA](https://reader033.fdocument.pub/reader033/viewer/2022042511/55cf9dbb550346d033aeeee2/html5/thumbnails/16.jpg)
• 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(){ .... } }
![Page 17: 07 - Mapeamento O-R Com JPA](https://reader033.fdocument.pub/reader033/viewer/2022042511/55cf9dbb550346d033aeeee2/html5/thumbnails/17.jpg)
• 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 }
![Page 18: 07 - Mapeamento O-R Com JPA](https://reader033.fdocument.pub/reader033/viewer/2022042511/55cf9dbb550346d033aeeee2/html5/thumbnails/18.jpg)
• 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;
![Page 19: 07 - Mapeamento O-R Com JPA](https://reader033.fdocument.pub/reader033/viewer/2022042511/55cf9dbb550346d033aeeee2/html5/thumbnails/19.jpg)
• 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 }
![Page 20: 07 - Mapeamento O-R Com JPA](https://reader033.fdocument.pub/reader033/viewer/2022042511/55cf9dbb550346d033aeeee2/html5/thumbnails/20.jpg)
• 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 }
![Page 21: 07 - Mapeamento O-R Com JPA](https://reader033.fdocument.pub/reader033/viewer/2022042511/55cf9dbb550346d033aeeee2/html5/thumbnails/21.jpg)
![Page 22: 07 - Mapeamento O-R Com JPA](https://reader033.fdocument.pub/reader033/viewer/2022042511/55cf9dbb550346d033aeeee2/html5/thumbnails/22.jpg)
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.
![Page 23: 07 - Mapeamento O-R Com JPA](https://reader033.fdocument.pub/reader033/viewer/2022042511/55cf9dbb550346d033aeeee2/html5/thumbnails/23.jpg)
• hpp://www.objectdb.com/java/jpa