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