3. Modelo
Relacional
CREATE TABLE user(
id int not null primary key,
name varchar(255) not null
);
CREATE TABLE post (
id int not null primary key,
title varchar(255) not null,
content text not null,
author_id int not null,
FOREIGN KEY (author_id)
REFERENCES user(id)
);
Modelo Orientado
a Objeto
public class User {
private Integer id;
private String name;
…
}
public class Post {
private Integer id;
private String title;
private String content;
private User author;
…
}
12. @Entity
Define que a classe representa uma entidade do
banco de dados
@Entity
public class Usuario {
.
.
.
}
13. @Table
Permite definir algumas configurações para as
entidades mapeadas como por exemplo o nome da
tabela:
@Entity
@Table(name=“user”)
public class Usuario {
.
.
.
}
14. @Id
Indica qual atributo da classe será mapeado
como chave primária:
@Entity
@Table(name=“user”)
public class Usuario {
@Id
private Integer id;
.
.
}
15. @GeneratedValue
Usado junto com @Id para indicar que o id será
gerado automaticamente:
@Entity
@Table(name=“user”)
public class Usuario {
@Id
@GeneratedValue(generator = “id”, strategy =
GenerationType.IDENTITY)
private Integer id;
}
21. Sincronização com o Banco de Dados
É a propagação das remoções, alterações e inserções para o
banco de dados.
Ocorre quando chamamos o método commit de uma
transação.
Podemos usar o método flush para fazer uma sincronização
sem finalizar a transação.
30. Adicionando o método getEntity a
classe Usuario
private EntityManager getEntityManager () {
HttpServletRequest request = ServletActionContext.getRequest();
EntityManager manager = (EntityManager)
request.getAttribute("EntityManager");
return manager;
}
31. Recebendo o entityManager no nosso
dao
private EntityManager manager;
public UsuarioDAO (EntityManager manager) {
this.manager = manager;
}
32. Refatorando os métodos do DAO
public void saveOrUpdate (Usuario usuario) {
this.manager.persist(usuario);
}
public Usuario buscar(Integer id) {
return this.manager.find(Usuario.class, 1);
}
public void remove(Usuario usuario) {
manager.remove(usuario);
}
public List<Usuario> lista () {
Query query = manager.createQuery("SELECT u FROM Usuario u");
return query.getResultList();
}
33. No controller
@Override
public String execute() throws Exception {
EntityManager manager = this.getEntityManager();
UsuarioDAO dao = new UsuarioDAO(manager);
dao.adiciona(this.usuario);
return AdicionaUsuarioAction.SUCCESS;
}
38. @ManyToMany
@JoinTable ( name =" Liv_Aut ",
joinColumns = @JoinColumn ( name =" Liv_ID "),
inverseJoinColumns = @JoinColumn ( name =" Aut_ID "))
private Collection <Autor > autores ;
O Padrão seria “livro_autor”
39. Lazy e Eager
@Basic(fetch=FetchType.LAZY)
@ManyToOne ( fetch = FetchType . LAZY )
Define que a propriedade não deve ser trazida do
banco no mesmo momento em que o Objeto.
@Basic(fetch=FetchType.EAGER)
@OneToOne ( fetch = FetchType . EAGER)
Define que a propriedade deve ser trazida do banco
no mesmo momento em que o Objeto.
41. Herança
@Entity
public class Pessoa {
@Id @GeneratedValue
private Long id;
private String nome ;
// GETTERS E SETTERS
}
Suponha que tenhamos as classes abaixo:
@Entity
public class PessoaJuridica extends
Pessoa {
private String cnpj ;
// GETTERS E SETTERS
}
@Entity
public class PessoaFisica extends Pessoa
{
private String cpf ;
// GETTERS E SETTERS
}
52. Independente da linha
que você seguir
(técnica, teórica,
acadêmica).
O importante é você
não ser simplesmente
bom, mas o melhor
naquilo que você faz.
Busque excelência técnica...
53. Fique atento para oportunidades, mesmo que não
sejam exatamente o que você esperava. Pense nos
resultados a longo prazo.