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
 
            