["Resolvido"] Inserir usuário com controle de permissão JSP, JPA, Hibernate

Fala galera, estou desenvolvendo uma aplicação web, porém travei na hora de inserir usuário, faltando apenas isso para terminar o projeto e dar sequência em outros aprimoramentos, oque acontece é o seguinte, estou tentando inserir um usuário, o mesmo irá pertencer a um, ou mais grupos, e cada grupo tem suas permissões.
Ao fazer os testes estou percebendo que o controller está recebendo quase todas as informações que o usuário entra lá na view, faltando apenas a informação do grupo, que é inserido, porém não chega no controller, segue as classes em questão e as relacionadas, e o resultado do teste feito…

Classe Usuário

@Entity
public class Usuario implements Serializable{

private static final long serialVersionUID = 1L;

@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long codigo;
private String email;
private String nome;
private String setor;
private String senha;
private Boolean ativo;

@Size(min=1, message="Informe pelo menos um grupo")
@ManyToMany
@JoinTable(name="usuario_grupo", joinColumns = 	@JoinColumn(name="codigo_usuario"),
			inverseJoinColumns= @JoinColumn(name="codigo_grupo"))	
private List<Grupo> grupos = new ArrayList<Grupo>();

...... métodos getters, setter, toString, hasCode, equals

Classe Grupo

@Entity
public class Grupo implements Serializable {

private static final long serialVersionUID = 1L;

@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long codigo;
private String nome;

@ManyToMany
@JoinTable(name="grupo_permissao", joinColumns = @JoinColumn(name="codigo_grupo"),
inverseJoinColumns = @JoinColumn(name="codigo_permissao"))
private List<Permissao> permissoes = new ArrayList<Permissao>();

    ...... métodos getters, setter, hasCode, equals

Classe Permissão

@Entity
public class Permissao implements Serializable {

private static final long serialVersionUID = 1L;

@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long codigo;
private String nome;

...... métodos getters, setter, hasCode, equals

Na view quando eu eu insiro os dados do usuário Nome, e-mail, senha, setor, ativo o usuário é salvo no banco de dados, gerando informação apenas na tabela Usuario, sem criar vínculos com outras tabelas.

Porém quando eu marco o checkbox do Grupo que ele pertence para ele ser Usuário ou Administrador, ou os dois juntos, ele não cadastra, e utilizando o método toString o Usuário para ver oque está chegando no controller pude ver que está chegando uma lista vazia, dessa forma…

Usuario [codigo=null, email=admin, nome=David Borelli, setor=CONTABILIDADE, senha=123, ativo=true, grupos=[]]

Segue o JSP da view…

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
<%@ taglib uri="http://www.springframework.org/tags" prefix="s"%>

<!DOCTYPE html>
<html lang="pt-BR">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">

<title>AspConexões | Inserir usuário</title>

<link rel="stylesheet" href="${contextPath}/resources/css/bootstrap.min.css">
<link rel="stylesheet" href="${contextPath}/resources/css/index.css">
</head>
<body>
<c:url value="/" var="contextPath" />

<jsp:include page="/resources/templates/navbar.jsp" />

<div class="container">
	<ol class="breadcrumb">
		<li><a href="${contextPath}">Início</a></li>
		<li><a href="${contextPath}">Cadastros</a></li>
		<li class="active">Inserir usuário</li>
	</ol>
	
	<div class="page-header">
		<h1>Inserir usuário</h1>
	</div>
	
	<form:form action="${s:mvcUrl('UC#gravar').build()}" method="post" commandName="usuario">
	
		<div class="form-group">
			<div class="col-sm-offset-2  com-sm-10">
				<ul>
					<c:forEach items="${erros}" var="msg">
						<li class="erro">${msg}</li>
					</c:forEach>
				</ul>
			</div>
		</div>
		
		
		<div class="row  form-group">	
		
			<div class="col-sm-12">
				<label for="nome" class="control-label">Nome</label>
				<form:input path="nome" cssClass="form-control "/>				
			</div>			
		</div>
		
		<div class="row  form-group">
			<div class="col-sm-5">
				<label for="email" class="control-label">E-mail</label>
				<form:input path="email" cssClass="form-control" autocomplete="false"/>
			</div>				
				
			<div class="col-sm-5" >	
				<label class="control-label" for="senha">Senha</label>
				<form:input type="password" path="senha" cssClass="form-control" 
autocomplete="false"/>	
			</div>				
		</div>
		
		<div class="row  form-group">
			<div class="col-sm-3">
				<label for="setor" class="control-label">Setor</label>
				<form:select path="setor" cssClass="form-control">
					<option value="">Selecione o setor...</option>
					<c:forEach items="${setores}" var="setor" >
						<form:option value="${setor}" >${setor.descricao}</form:option>
					</c:forEach>	
				</form:select>
			</div>				
		</div>
		
		<div class="row  form-group">
			<div class="radio  col-sm-2">
				<label><form:radiobutton path="ativo" name="ativo" id="ativo" value="true" 
checked="checked" />Ativo</label>	
				<label><form:radiobutton path="ativo" name="ativo" id="inativo" value="false" 
/>Inativo</label>
			</div>
		</div>	
		
		<div class="row">
			<div class="form-group  col-sm-6">
				<label class="control-label">Grupos</label> 
				<div>
					<c:forEach items="${pgrupos}" var="grupoFe" varStatus="status">
						<form:checkbox path="grupos" id="grupo_${status.index}" 
value="${grupoFe.codigo}"></form:checkbox>
						<label for="grupo_${status.index}">${grupoFe.nome}</label>
					</c:forEach>
				</div>
			</div>
		</div>
		
		<footer class="row  rodape">
			<div class="col-sm-6">
				<button class="btn btn-primary" type="submit">Salvar</button>
				<a href="${contextPath}" class="btn btn-default">Voltar</a>
			</div>
		</footer>		
	</form:form>			
</div>

<script src="<%=request.getContextPath()%>/resources/js/jquery-1.12.3.min.js"></script>
<script src="<%=request.getContextPath()%>/resources/js/bootstrap.min.js"></script>
<script src="<%=request.getContextPath()%>/resources/js/main.js"></script>	

</body>
</html>

Segue o UsuarioController

@Controller
@RequestMapping("/usuarios")
public class UsuarioController {

@Autowired
private UsuarioDAO usuarioDao;

@Autowired
private GrupoDAO grupoDao;

@RequestMapping("/cadastro")
public ModelAndView cadastrar(Usuario usuario) {
	ModelAndView modelAndView = new ModelAndView("/usuarios/inserirUsuarios");
	
	modelAndView.addObject("setores", Setor.values());
	modelAndView.addObject("pgrupos", grupoDao.buscarTodos());
	
	return modelAndView;
}

@RequestMapping(method=RequestMethod.POST)
public ModelAndView gravar(Usuario usuario, BindingResult result, RedirectAttributes attributes) {		

	if(result.hasErrors()) {
		System.out.println(usuario);
		return cadastrar(usuario);
	}
	
	System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>> Passou do erro");
	System.out.println(usuario);
	
	usuarioDao.salvar(usuario);			
	
	return new ModelAndView("redirect:/usuarios/cadastro");
}
}

Sei que o post ficou meio extenso mas espero ter conseguido passar todas as informação necessárias para que me ajudem resolver esse problema, e conseguir salvar esse bendito usuário no banco com seus respectivos grupos.

Fala pessoal, apenas para dar um retorno, como o projeto ainda está pequeno, vou deixar o usuário apenas com uma permissão, ou Usuário, ou Administrador então sendo assim o problema se resolve.