0
respostas

Implementar CRUD

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;
    }

}