Boa tarde!
Durante o curso foi abordado apenas o metodo salvar, alguem poderia mostrar como seria a implementação do metodo editar e remover usando a mesma logica aplicada no curso, segue abaixo como foi a implementação do metodo salvar:
Models
@Entity
@Cacheable
public class Livro {
@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer id;
@NotBlank
private String titulo;
@Lob
@Length(min=10)
@NotBlank
private String descricao;
@DecimalMin("20")
private BigDecimal preco;
@Min(50)
private Integer numeroPaginas;
@Temporal(TemporalType.DATE)
private Calendar dataPublicacao;
public String getTitulo() {
return titulo;
}
public void setTitulo(String titulo) {
this.titulo = titulo;
}
public String getDescricao() {
return descricao;
}
public void setDescricao(String descricao) {
this.descricao = descricao;
}
public BigDecimal getPreco() {
return preco;
}
public void setPreco(BigDecimal preco) {
this.preco = preco;
}
public Integer getNumeroPaginas() {
return numeroPaginas;
}
public void setNumeroPaginas(Integer numeroPaginas) {
this.numeroPaginas = numeroPaginas;
}
public List<Autor> getAutores() {
return autores;
}
public void setAutores(List<Autor> autores) {
this.autores = autores;
}
@Override
public String toString() {
return "Livro [id=" + id + ", titulo=" + titulo + ", descricao=" + descricao + ", preco=" + preco
+ ", numeroPaginas=" + numeroPaginas + ", autores=" + autores + "]";
}
public Calendar getDataPublicacao() {
return dataPublicacao;
}
public void setDataPublicacao(Calendar dataPublicacao) {
this.dataPublicacao = dataPublicacao;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
}
Dao
@Stateful
public class LivroDao {
@PersistenceContext(type=PersistenceContextType.EXTENDED)
private EntityManager manager;
public void salvar(Livro livro) {
manager.persist(livro);
}
public List<Livro> listar() {
String jpql = "select distinct(l) from Livro l "
+ " join fetch l.autores";
return manager.createQuery(jpql, Livro.class).getResultList();
}
public List<Livro> ultimosLancamentos() {
String jpql = "select l from Livro l order by l.id desc";
return manager.createQuery(jpql, Livro.class)
.setMaxResults(5)
.setHint(QueryHints.HINT_CACHEABLE, true)
.setHint(QueryHints.HINT_CACHE_REGION, "home")
.getResultList();
}
public List<Livro> demaisLivros() {
String jpql = "select l from Livro l order by l.id desc";
return manager.createQuery(jpql, Livro.class)
.setFirstResult(5)
.setHint(QueryHints.HINT_CACHEABLE, true)
.setHint(QueryHints.HINT_CACHE_REGION, "home")
.getResultList();
}
public Livro buscarPorId(Integer id) {
// return manager.find(Livro.class, id);
String jpql = "select l from Livro l join fetch l.autores "
+ "where l.id = :id";
return manager.createQuery(jpql, Livro.class)
.setParameter("id", id)
.getSingleResult();
}
}
Bean
package br.com.casadocodigo.loja.beans;
import java.util.List;
import javax.enterprise.context.RequestScoped;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.inject.Inject;
import javax.inject.Named;
import javax.servlet.http.Part;
import javax.transaction.Transactional;
import br.com.casadocodigo.loja.daos.AutorDao;
import br.com.casadocodigo.loja.daos.LivroDao;
import br.com.casadocodigo.loja.infra.FileSaver;
import br.com.casadocodigo.loja.models.Autor;
import br.com.casadocodigo.loja.models.Livro;
@Named
@RequestScoped
public class AdminLivrosBean {
private Livro livro = new Livro();
@Inject
private LivroDao dao;
@Inject
private AutorDao autorDao;
@Inject
private FacesContext context;
private Part capaLivro;
@Transactional
public String salvar() {
FileSaver fileSaver = new FileSaver();
String capaPath = fileSaver.write(capaLivro, "livros");
livro.setCapaPath(capaPath);
dao.salvar(livro);
context.getExternalContext()
.getFlash().setKeepMessages(true);
context
.addMessage(null, new FacesMessage("Livro cadastrado com sucesso!"));
return "/livros/lista?faces-redirect=true";
}
public List<Autor> getAutores() {
return autorDao.listar();
}
public Livro getLivro() {
return livro;
}
public void setLivro(Livro livro) {
this.livro = livro;
}
public Part getCapaLivro() {
return capaLivro;
}
public void setCapaLivro(Part capaLivro) {
this.capaLivro = capaLivro;
}
}