Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Palestrante
Agenda Geral
O que é mapeamento
Objeto/Relacional (ORM)?
• Mecanismo sofisticado para
mapeamento de objetos
Java em memória, para
tabelas do banco de dados
• Permite persistir objetos em
banco de dados relacionais
• Permite pesquisas
complexas
• Permite debug e
auditoria(log) das operações
entre a aplicação e o banco
de dados
O que é mapeamento
Objeto/Relacional (ORM)?
• Cada instância de objeto
corresponde a um registro
no banco de dados
Agenda JPA
• Finalmente um consenso!
> Padronização do mapeamento O/R
> Fusão de experiência dos criadores do Hibernate, JDO,
TopLink, fornecedores EJB e participações individuais
> Suporte para implementações de persistência plugáveis, de
diferentes fornecedores (análogo ao JDBC)
• Uso em containers Java EE e em ambiente Java SE
Entidade na JPA
Chave primária
• New
– Criada usando a palavra-chave new
– Não tem id persistente
• Managed
– Tem um id persistente associado a um
contexto de persistência
• Removed
– Tem um id persistente associado a um
contexto de persistência
– Está escalonada para ser excluída do
banco de dados
• Detached
– Tem um id persistente, mas não está
associada com um contexto de
persistência
MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007
21
EntityManager
• Similar à funcionalidade do
Hibernate Session, controla o ciclo
de vida das entidades
• new()
– Cria uma nova entidade
• persist()
– Persiste uma entidade
• refresh()
– Atualiza o estado da entidade
• remove()
– Marca uma entidade para remoção
• merge()
– Sincroniza o estado de entidades
desacopladas
EntityManager
...
...
...
...
...
...
Detached Entities
Mapeamento O/R
Mapeamentos simples
CUSTOMER
ID NAME C_RATING PHOTO
@Entity
public class Customer {
@Id
int id;
String name;
int c_rating;
@Lob
Image photo;
}
Mapeamentos simples
CUSTOMER
ID NAME CREDIT PHOTO
@Entity
public class Customer {
@Id
int id;
String name;
@Column(name=“CREDIT”)
int c_rating;
@Lob
Image photo;
}
@Entity
@Table(name=“TB_EMPLOYEE")
public class EMPLOYEE {
...
@Column(name=“TX_NAME", nullable=false, length=30)
public String getName() { return name; }
}
Controle portável de concorrência
@Version
@Column("OPTLOCK")
protected int getVersionNum() { return versionNum; }
@ManyToOne
@JoinColumn(name="ADDR_ID")
public Address getAddress() { return address; }
Listeners de entidades
@PostLoad
public void adjustPreferredStatus() {
preferred =(getBalance() >=
AccountManager.getPreferredStatusLevel());
}
…
MGJUG - Java Persistence API - Adriano Tavares – 15/02/2007
37
@PostPersist
public void newAccountAlert(Account acct) {
Alerts.sendMarketingInfo(acct.getAccountId(),
acct.getBalance());
}
}
Comportamento em cascata
• Usado para propagar o efeito de uma operação à
entidades associadas
• Operações em cascata executam somente quando as
entidades estão associadas ao contexto de persistência
> Se uma operação em cascata é aplicada a uma entidade
detached, uma IllegalArgumentException é disparada
• Cascade=PERSIST
• Cascade=REMOVE
• Cascade=MERGE
• Cascade=REFRESH
• Cascade=ALL
Relacionamento: Exemplo
@Entity
public class Project {
@ManyToMany(cascade={CascadeType.ALL})
@JoinTable(name=“PROJ_EMP”)
public Collection<Employee> getEmployees() {
return employees;
}
Herança de entidade
@Entity
@Table(name=”CUST”)
@Inheritance(strategy=SINGLE_TABLE)
@DiscriminatorColumn(name=“CUST_TYPE",
discriminatorType=STRING)
@DiscriminatorValue(“CUST")
public class Customer {...}
@Entity
@Inheritance(discriminatorValue=”VCUST”)
public class ValuedCustomer extends Customer{...}
Avanços do EJB QL
• Group By / Having
• Subqueries
• Funções SQL adicionais
> UPPER, LOWER, TRIM, CURRENT_DATE, ...
• Joins
• Consultas polimórficas
• Suporte para pesquisas dinâmicas e também pesquisas
nomeadas
Dynamic Queries
Named Queries
@NamedQuery(
name=“findCustomersByName”,
queryString=“SELECT c FROM Customer c” +
“WHERE c.name LIKE :custName”
)
Resumo
WTP 2.0
WTP 2.0
• Web Applications
> Servlet 2.5 (JSR 154)
> JSP 2.1 (JSR 245)
> JSTL (JSR 52)
> JSF 1.2
• Enterprise Applications
> EJB3
> JPA (JSR 220)
> JCA 1.5 (JSR 112)
WTP 2.0
Demo Dali
Demo Dali
Demo Dali
• Criar conexão
Demo Dali
Demo Dali
Demo Dali