Java Persistence Architecture
Julio M. Faerman
Java Persistence Architecture
Mapeamento O-R
Plain Old
Java
Object
Mapeamento
ObjetoRelacional
SGBDR
Convenções
Anotações
XML
#2
Java Persistence Architecture
Java Persistence Architecture
XML
Anotações
Convenções
Object
JPA
javax.persistence
MySQL
Hibernate,
Toplink,
OpenJPA,
EclipseLink
Convenções
Anotações
XML
#3
Java Persistence Architecture
Java Persistence Architecture
Artefato
JPA
Hibernate
Configuração
persistence.xml
hibernate.cfg.xml
Hibernate.properties
Mapeamento
Annotations
@javax.persistence
@org.hibernate.annotations
Mapeamento XML
orm.xml
.hbm.xml
Queries
JPQL
HQL
#4
Java Persistence Architecture
API
#5
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);
#6
Java Persistence Architecture
Ciclo de vida de entidades
#7
Java Persistence Architecture
META-INF/persistence.xml
#8
Java Persistence Architecture
Entidades
• @Entity
• Construtor sem
argumentos public ou
protected
• Não final
• Serializable*
#9
Java Persistence Architecture
Chaves Primárias
• @Id
• @GeneratedValue
–
–
–
–
GenerationType.IDENTITY
GenerationType.SEQUENCE
GenerationType.TABLE
GenerationType.AUTO
• @SequenceGenerator
# 10
Java Persistence Architecture
PKs Compostas
• @EmbeddedID
• @IdClass
@Embeddable
class PkEntidade{
long pk1;
long pk2;
}
class PkEntidade{
long pk1;
long pk2;
}
@Entity
Class Entidade{
@EmbeddedId
PkEntidade id;
}
@Entity
@IdClass(PkEntidade.class)
Class Entidade{
@Id pk1;
@Id pk2;
}
# 11
Java Persistence Architecture
Propriedades
• Primitivos e Wrappers
• Numericos
– @Column(scale = 4, precision = 15)
• Temporais
– @Temporal(TemporalType.TIMESTAMP)
• Enumerados
– @Enumerated(EnumType.STRING)
• @Transient / transient
# 12
Java Persistence Architecture
Hello World JPA
# 13
Java Persistence Architecture
Relacionamentos @OneToOne
pessoa.getPassaporte();
Pessoa
Passaporte
passaporte.getPessoa();
Pessoa
Pessoa
@OneToOne
-Dono (owner) da
associação
- Tabela que vai ter a FK
Passaporte
Passaporte
passaporte.getPessoa();
pessoa.getPassaporte();
@OneToOne(mappedBy=“passaporte”)
# 14
Java Persistence Architecture
@OneToMany / @ManyToOne
@ManyToOne
Departamento dpt =
pessoa.getDepartamento();
@OneToMany
List<Peca> peacas =
carro.getPecas();
@OneToMany(
cascade=CascadeType.ALL)
O lado many sempre é owner e não declara mappedBy.
# 15
Java Persistence Architecture
Relacionamentos @ManyToMany
Escola
N
N
Predio
Set<Escola> escolas = predio.getEscolas();
Set<Predio> predios = escola.getPredios();
- Qualquer lado pode ser owner
# 16
Java Persistence Architecture
Herança
@Inheritance(
strategy=InheritanceType.SINGLE_TABLE)
Pessoa
ID
DTYPE
Nome
Cpf
CNPJ
@Inheritance(
strategy=InheritanceType.JOINED)
Pessoa
ID
DTYPE
PessoaFisica
Nome
ID
CPF
PessoaFisica
ID
Nome
CPF
PessoaJuridica
ID
CNPJ
PessoaJuridica
ID
Nome
# 17
CNPJ
Java Persistence Architecture
Controle do esquema do banco
• @Table
• @SecondaryTables
• @Column
• @JoinTable
• @JoinColumn
• @UniqueConstraint
# 18
Java Persistence Architecture
Consultas JPQL
• SELECT
select p from PessoaFisica as p where
p.passaporte.numero = :numero
• UPDATE
update Filial f set f.status = ’especial'
where f.vendas > 1000000
• DELETE
delete from filial f where f.vendas = 0 AND
f.funcionarios IS EMPTY
# 19
Java Persistence Architecture
Consultas Nomeadas
@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();
# 20
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"),
})})
@Entity
public class Order {
@Id
protected int id;
protected long quantity;
@ManyToOne
protected Item item;
...
}
..
em.createNativeQuery(
“select * from
Order”,”OrderResults”);
# 21
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>
# 22
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>
# 23
http://www.hibernate.org/hib_docs/reference/en/html/
Java Persistence Architecture
Persistencia completa usando JPA
# 24
Java Persistence Architecture
Dúvidas ?
# 25
Download

Pessoa - cursos