Spring mvc e JPA

Oii!!!

Pessoal,

Estou com uma duvida, se alguém pode me dar uma ajuda, tenho um cadastro de Cliente, onde tenho que cadastrar alem do cliente uma lista de contatos, uma lista de telefones e fora que o contato tem uma lista de emails e lista de telefones pra cadastrar.

Estou usando minha entidade pra pegar os dados da tela tenho que cadastrar tudo junto:
segue os codigos:
Minha Controller


@Controller
public class ClienteController {

    ModelAndView viewTiles;
    private static String CADASTRO_CLIENTE = "cadastro.cliente";
    private static final Logger logger = LoggerFactory.getLogger(ClienteController.class);

    @Autowired
    @Qualifier("clienteService")
    private ClienteService clienteService;

    @Autowired
    @Qualifier("estadoService")
    private EstadoService estadoService;
    
    @ModelAttribute("listaTipoTelefone")
    public TipoTelefone[] listaTipoTelefone(){
    	return TipoTelefone.values();
    }
    @ModelAttribute("listaTipoEmail")
    public TipoEmail[] listaTipoEmail(){
    	return TipoEmail.values();
    }
    
    @ModelAttribute("listaEstados")
    public List<Estado> listaUF(){
    	return estadoService.listAll() ;
    }

    @RequestMapping(value = "listCliente", method = RequestMethod.GET)
    public ModelAndView listarClientes(@ModelAttribute("cliente")Cliente cliente, 
    		@ModelAttribute("contato") Contato contato,@ModelAttribute("telefone")Telefone telefone,
    		@ModelAttribute("email") Email email,
    		ModelMap modelMap, ModelAndView model) {
	try {
			 List<Cliente> listaModelos = clienteService.listAll();
			 List<Telefone> listaTelefones = new ArrayList<Telefone>();
			listaTelefones = cliente.getTelefones();
			List<Contato> listaContatos = new ArrayList<Contato>();
			
			listaContatos = cliente.getContatos();
			List<Telefone> listaContatoTelefones = new ArrayList<Telefone>();
			listaContatoTelefones = contato.getTelefones() ;
			List<Email> listaContatoEmail = new ArrayList<Email>();
			listaContatoEmail = contato.getEmails();
			
			
	    logger.info("Listar Clientes cadastrados.........");
	   
	    modelMap.addAttribute("listaTelefones", listaTelefones);
	    modelMap.addAttribute("listaContatos", listaContatos);
	    modelMap.addAttribute("listaContatoTelefones", listaContatoTelefones);
	    modelMap.addAttribute("listaContatoEmail", listaContatoEmail);
	    
	    modelMap.addAttribute("listaCliente", listaModelos); //
	    ModelAndView viewTiles = new ModelAndView(CADASTRO_CLIENTE);
	    return viewTiles;
	} catch (Exception e) {
	    String erro = MessageFormat.format("Erro buscar lista de clientes: {0}", e.getMessage());
	    logger.error(erro);
	    throw new SGAControllerException(erro);
	}
    }

minha Entidade Cliente


@Entity
@Table(name = "TB_CLIENTE")
@SQLDelete(sql = "update TB_CLIENTE set FL_ATIVO = 'FALSE' where ID_CLIENTE = ?")
@Where(clause="FL_ATIVO = 'TRUE'")
public class Cliente implements Serializable {
    
    public Cliente() {
	ativo =true;
    }

    private static final long serialVersionUID = -4905988982554153192L;
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_CLIENTE")
    @SequenceGenerator(name = "SEQ_CLIENTE", initialValue = 1)
    @Column(name = "ID_CLIENTE")
    private Long id;
    @Lob
    @Column(name = "CL_OBSERVACAO")
    private String observacao;
    @Column(name = "DS_SITE")
    @URL
    private String site;
    @OneToOne
    @JoinColumn(name = "ID_PESSOA_JURIDICA")
    private PessoaJuridica pessoaJuridica;

    @OneToOne(cascade=CascadeType.ALL)
    @JoinColumn(name = "ID_ENDERECO")
    private Endereco endereco;

    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    @JoinTable(name = "TB_CLIENTE_CONTATO)", joinColumns = { @JoinColumn(name = "ID_CLIENTE") }, inverseJoinColumns = { @JoinColumn(name = "ID_CONTATO") })
    private List<Contato> contatos;

    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    @JoinTable(name = "TB_CLIENTE_TELEFONE", joinColumns = { @JoinColumn(name = "ID_CLIENTE") }, inverseJoinColumns = { @JoinColumn(name = "ID_TELEFONE") })
    private List<Telefone> telefones;

Minha jsp só uma parte onde tenho a lista

[code]
<form:form modelAttribute=“telefone”>


<fmt:message key=“label.tipoTelefone” /><fmt:message key=“label.doispontos” />


<form:select path=“tipoTelefone”>
<form:option value=""><fmt:message key=“label.selecione”/></form:option>
<c:forEach items="${listaTipoTelefone}" var=“tipoTelefone”>
<form:option value="${tipoTelefone}">${tipoTelefone.descricao}</form:option>
</c:forEach>
</form:select>


<fmt:message key=“label.numero” />
<fmt:message key=“label.doispontos” />





<fmt:message key=“label.ramal” />
<fmt:message key=“label.doispontos” />


<input type=“text” name=“ramal” id=“ramal"value=”${ramal }" />




</form:form>
						<c:choose>
							<c:when test="${not empty listaTelefones}">
								<article class="litaTabela">
							<table id="green">
							<thead>
								<tr class="ui-widget-header ">
									<th><fmt:message key="label.tipoTelefone"></fmt:message></th>
									<th><fmt:message key="label.numero" /></th>
									<th><fmt:message key="label.ramal" /></th>
									<th><fmt:message key="label.editar" /></th>
									<th><fmt:message key="label.deletar" /></th>
									<th><fmt:message key="label.visualizar" /></th>
								</tr>
							</thead>
							<tbody>
								<c:forEach var="tel" items="${listaTelefones}" varStatus="contador">
									<c:if test="${contador.count % 2 == 0}">
										<tr bgcolor="#B0C4DE">
									</c:if>
									<c:if test="${contador.count % 2 == 1}">
										<tr bgcolor="WhiteSmoke">
									</c:if>
									<td>${tel.tipoTelefone}</td>
									<td>${tel.tefone}</td>
									<td>${tel.ramal}</td>
									<td><a href="editarTelefone.html?id=${tel.id}"><img
											alt="editar" src="resources/css/images/editar.png"></a></td>
									<td><a href="deletarTelefone.html?id=${tel.id}"><img
											alt="Deletar" src="resources/css/images/excluir.png"></a></td>
									<td><a href="vizualizarTelefone.html?id=${tel.id}"><img
											alt="Visualizar" src="resources/css/images/visualizar.png"></a></td>
									</tr>
								</c:forEach>
							</tbody>
							</table>	
							</article>
							</c:when>
						</c:choose>	
			[/code]

As lista etou fazendo assim pode adicionar vários telefones pra depois salvar o Cliente todo.
Não sei como vou preencher a lista de telefones.

Não sei se existe uma maneira mais fácil de fazer

Abraços