Java Persistence Architecture

25
Java Persistence Architecture Julio M. Faerman

description

Java Persistence Architecture. Julio M. Faerman. Mapeamento O-R. P lain O ld J ava O bject. Mapeamento Objeto-Relacional. SGBDR. Convenções. Anotações. XML. Java Persistence Architecture. XML. Anotações. Convenções. Object. JPA javax.persistence. MySQL. - PowerPoint PPT Presentation

Transcript of Java Persistence Architecture

Page 1: Java Persistence Architecture

Java Persistence Architecture

Julio M. Faerman

Page 2: Java Persistence Architecture

Mapeamento O-R

Java Persistence Architecture

# 2

Plain

Old

Java

Object

Plain

Old

Java

Object

Mapeamento Objeto-Relacional

Mapeamento Objeto-Relacional SGBDRSGBDR

AnotaçõesAnotações

XMLXML

ConvençõesConvenções

Page 3: Java Persistence Architecture

Java Persistence Architecture

Java Persistence Architecture

# 3

Object

Object

JPAjavax.persisten

ce

JPAjavax.persisten

ceMySQLMySQL

AnotaçõesAnotações

XMLXML

Hibernate, Toplink, OpenJPA,

EclipseLink

Hibernate, Toplink, OpenJPA,

EclipseLink

ConvençõesConvenções

ConvençõesConvenções

AnotaçõesAnotações

XMLXML

Page 4: Java Persistence Architecture

Java Persistence Architecture

Java Persistence Architecture

# 4

Artefato JPA Hibernate

Configuração persistence.xml hibernate.cfg.xmlHibernate.properties

Mapeamento Annotations

@javax.persistence @org.hibernate.annotations

Mapeamento XML orm.xml .hbm.xml

Queries JPQL HQL

Page 5: Java Persistence Architecture

API

Java Persistence Architecture

# 5

Page 6: Java Persistence Architecture

Ciclo de vida de entidades

Estado Contexto Persistente

ID Exemplo

Novo (new) Não Não ent = new Entidade();

Gerenciado (managed)

Sim Sim em.persist(ent);

Desvinculado (detached)

Não Sim em.close();

Removido (removed) Sim Sim em.remove(ent);

Java Persistence Architecture

# 6

Page 7: Java Persistence Architecture

Ciclo de vida de entidades

Java Persistence Architecture

# 7

Page 8: Java Persistence Architecture

META-INF/persistence.xml

Java Persistence Architecture

# 8

Page 9: Java Persistence Architecture

Entidades

• @Entity• Construtor sem

argumentos public ou protected

• Não final• Serializable*

Java Persistence Architecture

# 9

Page 10: Java Persistence Architecture

Chaves Primárias

• @Id• @GeneratedValue

– GenerationType.IDENTITY– GenerationType.SEQUENCE– GenerationType.TABLE– GenerationType.AUTO

• @SequenceGenerator

Java Persistence Architecture

# 10

Page 11: Java Persistence Architecture

PKs Compostas

• @EmbeddedID@Embeddable

class PkEntidade{

long pk1;

long pk2;

}

@Entity

Class Entidade{

@EmbeddedId

PkEntidade id;

}

• @IdClassclass PkEntidade{

long pk1;

long pk2;

}

@Entity

@IdClass(PkEntidade.class)

Class Entidade{

@Id pk1;

@Id pk2;

}

Java Persistence Architecture

# 11

Page 12: Java Persistence Architecture

Propriedades

• Primitivos e Wrappers• Numericos

– @Column(scale = 4, precision = 15)

• Temporais– @Temporal(TemporalType.TIMESTAMP)

• Enumerados– @Enumerated(EnumType.STRING)

• @Transient / transient

Java Persistence Architecture

# 12

Page 13: Java Persistence Architecture

Hello World JPA

Java Persistence Architecture

# 13

Page 14: Java Persistence Architecture

Relacionamentos @OneToOne

Java Persistence Architecture

# 14

PessoaPessoa Passaporte

Passaporte

PessoaPessoa Passaporte

Passaporte

PessoaPessoa Passaporte

Passaporte

pessoa.getPassaporte();pessoa.getPassaporte();

passaporte.getPessoa();passaporte.getPessoa();

passaporte.getPessoa();pessoa.getPassaporte();passaporte.getPessoa();pessoa.getPassaporte();

@OneToOne(mappedBy=“passaporte”)@OneToOne(mappedBy=“passaporte”)@OneToOne-Dono (owner) da associação- Tabela que vai ter a FK

@OneToOne-Dono (owner) da associação- Tabela que vai ter a FK

Page 15: Java Persistence Architecture

@OneToMany / @ManyToOne

Java Persistence Architecture

# 15

@ManyToOne

Departamento dpt = pessoa.getDepartamento();

@ManyToOne

Departamento dpt = pessoa.getDepartamento();

@OneToMany

List<Peca> peacas = carro.getPecas();

@OneToMany

List<Peca> peacas = carro.getPecas();

@OneToMany(cascade=CascadeType.ALL)@OneToMany(cascade=CascadeType.ALL)

O lado many sempre é owner e não declara mappedBy.O lado many sempre é owner e não declara mappedBy.

Page 16: Java Persistence Architecture

Relacionamentos @ManyToMany

Java Persistence Architecture

# 16

EscolaEscola PredioPredioN N

Set<Escola> escolas = predio.getEscolas();Set<Predio> predios = escola.getPredios();- Qualquer lado pode ser owner

Set<Escola> escolas = predio.getEscolas();Set<Predio> predios = escola.getPredios();- Qualquer lado pode ser owner

Page 17: Java Persistence Architecture

Herança

Java Persistence Architecture

# 17

@Inheritance(strategy=InheritanceType.SINGLE_TABLE)

@Inheritance(strategy=InheritanceType.JOINED)

Pessoa

ID DTYPE Nome Cpf CNPJ

Pessoa

ID DTYPE Nome

PessoaFisica

ID Nome CPF

PessoaFisica

ID CPF

PessoaJuridica

ID CNPJ

PessoaJuridica

ID Nome CNPJ

Page 18: Java Persistence Architecture

Controle do esquema do banco

• @Table• @SecondaryTables• @Column• @JoinTable• @JoinColumn• @UniqueConstraint

Java Persistence Architecture

# 18

Page 19: Java Persistence Architecture

Consultas JPQL

• SELECTselect p from PessoaFisica as p where p.passaporte.numero = :numero

• UPDATEupdate Filial f set f.status = ’especial' where f.vendas > 1000000

• DELETEdelete from filial f where f.vendas = 0 AND f.funcionarios IS EMPTY

Java Persistence Architecture

# 19

Page 20: Java Persistence Architecture

Consultas Nomeadas

Java Persistence Architecture

# 20

@Entity

@NamedQueries({

@NamedQuery(name="pf.todas",query="select pf from PessoaFisica pf"),

@NamedQuery(name="pf.porPassaporte",

query="select p from PessoaFisica p where p.passaporte.numero = :numero")})

public class PessoaFisica extends Pessoa {…

@Entity

@NamedQueries({

@NamedQuery(name="pf.todas",query="select pf from PessoaFisica pf"),

@NamedQuery(name="pf.porPassaporte",

query="select p from PessoaFisica p where p.passaporte.numero = :numero")})

public class PessoaFisica extends Pessoa {…

Query query = em.createNamedQuery("pf.porPassaporte");

query.setParameter("numero", "123456");

PessoaFisica p = (PessoaFisica) query.getSingleResult();

Query query = em.createNamedQuery("pf.porPassaporte");

query.setParameter("numero", "123456");

PessoaFisica p = (PessoaFisica) query.getSingleResult();

Page 21: Java Persistence Architecture

Consultas Nativas (SQL)@SqlResultSetMapping( name="OrderResults", entities={ @EntityResult( entityClass=Order.class, fields={ @FieldResult(name="id", column="order_id"), @FieldResult(name="quantity",

column="order_quantity"), @FieldResult(name="item", column="order_item") } ), @EntityResult( entityClass=Item.class, fields={ @FieldResult(name="id", column="item_id"), @FieldResult(name="name",

column="item_name"), })})

Java Persistence Architecture

# 21

@Entitypublic class Order { @Id protected int id; protected long quantity; @ManyToOne protected Item item; ...}..em.createNativeQuery(“select * from Order”,”OrderResults”);

Page 22: Java Persistence Architecture

orm.xml (JSR 220, chap. 10)<?xml version="1.0" encoding="UTF-8" ?>

<entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm http://java.sun.com/xml/ns/persistence/orm_1_0.xsd"

version="1.0">

<description>JPOX JPA tutorial</description>

<package>org.jpox.tutorial.jpa</package>

<entity class="org.jpox.samples.metadata.store.Product" name="Product">

<table name="JPA_PRODUCTS"/>

<attributes>

<id name="id">

<generated-value strategy="TABLE"/>

</id>

<basic name="name">

<column name="PRODUCT_NAME" length="100"/>

</basic>

<basic name="description">

<column length="255"/>

</basic>

</attributes>

</entity>

</entity-mappings>

Java Persistence Architecture

# 22

Page 23: Java Persistence Architecture

hbm.xml<?xml version="1.0"?>

<!DOCTYPE hibernate-mapping PUBLIC

"-//Hibernate/Hibernate Mapping DTD 3.0//EN"

"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>

<class name="events.Event" table="EVENTS">

<id name="id" column="EVENT_ID">

<generator class="native"/>

</id>

<property name="date" type="timestamp" column="EVENT_DATE"/>

<property name="title"/>

</class>

</hibernate-mapping>

Java Persistence Architecture

# 23

http://www.hibernate.org/hib_docs/reference/en/html/

Page 24: Java Persistence Architecture

Persistencia completa usando JPA

Java Persistence Architecture

# 24

Page 25: Java Persistence Architecture

Java Persistence Architecture

# 25

Dúvidas ?