Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Duvida sobre relação OneToMany e EllementCollection

Estou perdido em como eu criar um formulario e uma tabela para exibir da lista da classe Produto sendo que essa lista pertence a classe Cliente, eu devo usar a anotação de EllementCollection ou OneToMany, e como faria para mandar os dados do Produto para o jsp?

A classe Cliente

package br.com.ykz.controledeestoque.models;

import java.util.List;

import javax.persistence.ElementCollection;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;

@Entity
public class Cliente {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;
    private String nome;

    @ElementCollection
    private List<Produto> produtos;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public List<Produto> getProdutos() {
        return produtos;
    }

    public void setProdutos(List<Produto> produtos) {
        this.produtos = produtos;
    }

    @Override
    public String toString() {
        return "Cliente [nome=" + nome + "]";
    }
}

A classe Produto

package br.com.ykz.controledeestoque.models;

import javax.persistence.Embeddable;


@Embeddable
public class Produto {

    private String referencia;
    private String descricao;
    private String tamanho;
    private String cor;
    private Integer estoque;


    public String getReferencia() {
        return referencia;
    }
    public void setReferencia(String referencia) {
        this.referencia = referencia;
    }
    public String getDescricao() {
        return descricao;
    }
    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }
    public String getTamanho() {
        return tamanho;
    }
    public void setTamanho(String tamanho) {
        this.tamanho = tamanho;
    }
    public String getCor() {
        return cor;
    }
    public void setCor(String cor) {
        this.cor = cor;
    }
    public Integer getEstoque() {
        return estoque;
    }
    public void setEstoque(Integer estoque) {
        this.estoque = estoque;
    }    
}

A classe ClienteDao

package br.com.ykz.controledeestoque.dao;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.TypedQuery;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;
import javax.transaction.Transactional;

import org.springframework.stereotype.Repository;

import br.com.ykz.controledeestoque.models.Cliente;
import br.com.ykz.controledeestoque.models.Produto;

@Repository
@org.springframework.transaction.annotation.Transactional
public class ClienteDao {

    @PersistenceContext
    private EntityManager entityManager;

    public void persist(Cliente cliente) {

        entityManager.persist(cliente);
    }

    public List<Cliente> getListaClientes() {

        CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
        CriteriaQuery<Cliente> query = criteriaBuilder.createQuery(Cliente.class);
        query.from(Cliente.class);

        TypedQuery<Cliente> typedQuery = entityManager.createQuery(query);
        return typedQuery.getResultList();
    }
}

A classe ClienteController

package br.com.ykz.controledeestoque.controllers;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;

import br.com.ykz.controledeestoque.dao.ClienteDao;
import br.com.ykz.controledeestoque.models.Cliente;

@Controller
@RequestMapping("/clientes")
public class ClienteController {

    @Autowired
    private ClienteDao clienteDao;

    @RequestMapping("/form")
    public String form() {

        return "clientes/form";
    }

    @RequestMapping(method = RequestMethod.GET)
    public ModelAndView listaClientes() {
        ModelAndView modelAndView = new ModelAndView("/clientes/lista");
        List<Cliente> clientes = clienteDao.getListaClientes();
        modelAndView.addObject("clientes", clientes);

        return modelAndView;
    }

    @RequestMapping(method = RequestMethod.POST )
    public ModelAndView persistCliente(Cliente cliente) {
        clienteDao.persist(cliente);

        return new ModelAndView("redirect:/clientes");
    }
}

Até este ponto esta tudo funcionando, consigo criar um cliente e exibi-lo em uma tabela no jsp

2 respostas
solução!

Ja resolvido

Boa tarde, Nícolas! Como vai?

Que bom que resolveu! Inclusive, vc poderia compartilhar a sua solução conosco? Assim se outros alunos caírem na mesma situação no futuro poderão encontrar no seu tópico o caminho para a luz do conhecimento!

Grande abraço e bons estudos, meu aluno!