Bom dia,
Tenho 3 Entitys (Usuario, Regra, RegraUsuario) que se relacionam sendo a RegraUsuario a intermediaria, segue os codigos delas:
Usuario:
@Entity
@Table(name="INTRA_NESIC_USUARIO")
public class Usuario {
@Id @GeneratedValue
private Long id;
@Column(updatable = true, nullable = false)
private String nome;
@Column(updatable = true, nullable = false)
private String login;
@Column(updatable = true, nullable = false)
private String senha;
@Column(columnDefinition = "date DEFAULT GETDATE()", insertable = false, updatable = true, nullable = false)
private Date datacad;
@Column(columnDefinition = "int default 0", insertable = false, updatable = true, nullable = false)
private Long flgatv ;
@OneToMany(mappedBy="usuario", cascade=CascadeType.ALL)
private Collection<RegraUsuario> regraUsuarioList;
//getters e setters
Regra:
@Entity
@Table(name="INTRA_NESIC_REGRA")
public class Regra {
@Id @GeneratedValue
private Long id;
@Column(updatable = true, nullable = false)
private String regra;
@Column(updatable = true, nullable = false)
private String descricao;
@Column(columnDefinition = "date DEFAULT GETDATE()", insertable = false, updatable = true, nullable = false)
private Date datacad;
@Column(columnDefinition = "int default 0", insertable = false, updatable = true, nullable = false)
private Long flgatv ;
@OneToMany(mappedBy="regra", cascade=CascadeType.ALL)
private Collection<RegraUsuario> regraUsuarioList;
//getters e setters
RegraUsuario:
@Entity
@Table(name="INTRA_NESIC_REGRA_USUARIO")
public class RegraUsuario {
@Id @GeneratedValue
private Long id;
@ManyToOne @JoinColumn(name="usuario_id")
private Usuario usuario;
@ManyToOne @JoinColumn(name="regra_id")
private Regra regra;
@Column(columnDefinition = "date DEFAULT GETDATE()", insertable = false, updatable = false, nullable = false)
private Date datacad;
@Column(columnDefinition = "int default 0", insertable = false, updatable = false, nullable = false)
private Long flgatv ;
//getters e setters
Tudo funciona bem porem no jsp de cadastro de usuario eu inclui alguns checkbox que listam as regras cadastradas na entity Regra e ae eu posso selecionar as q eu quiser para atribuir regras ao usuario que estou cadastrando, porem ao inserir o usuario os campos regra_id e usuario_id da tabela RegraUsuario ficam com valor null.
Segue o codigo do jsp de adição de usuario (onde tenho quase certeza que esta o erro, só nao sei qual é):
<form id="usuariosForm" action="<c:url value="/usuarios"/>" method="POST">
<fieldset>
<legend>Criar novo usuário</legend>
<label for="nome">Nome:</label>
<input id="nome" class="required"
type="text" name="usuario.nome" value="${usuario.nome }"/>
<label for="regra_id">Regra:</label>
<c:forEach items="${regraUsuarioList}" var="regra">
<input type="checkbox" name="usuario.regraUsuarioList[].id" value="${regra.id}"/> ${regra.regra }
</c:forEach>
<label for="login">Login:</label>
<input id="login" class="required"
type="text" name="usuario.login" value="${usuario.login}"/>
<label for="senha">Senha:</label>
<input id="senha" class="required" type="password" name="usuario.senha"/>
<label for="confirmacao">Confirme a senha:</label>
<input id="confirmacao" equalTo="#senha" type="password"/>
<button type="submit">Enviar</button>
</fieldset>
</form>
<script type="text/javascript">
$('#usuariosForm').validate();
</script>
segue o controller e a DAO do usuario caso precise:
@Resource
public class UsuariosController {
private final UsuarioDAO dao;
private final RegraDAO daoRegra;
private final Result result;
private final Validator validator;
private final UsuarioWeb usuarioWeb;
public UsuariosController(UsuarioDAO dao, Result result, Validator validator,
UsuarioWeb usuarioWeb, RegraDAO daoRegra) {
this.dao = dao;
this.daoRegra = daoRegra;
this.result = result;
this.validator = validator;
this.usuarioWeb = usuarioWeb;
}
@Post @Path("/usuarios")
public void adiciona(Usuario usuario) {
if (dao.existeUsuario(usuario)) {
validator.add(new ValidationMessage("Login já existe", "usuario.login"));
}
validator.onErrorUsePageOf(UsuariosController.class).novo();
dao.adiciona(usuario);
result.redirectTo("/");
}
@Path("/logout")
public void logout() {
usuarioWeb.logout();
result.redirectTo("/");
}
@Get @Path("/")
public void loginForm() {
}
@Path("/negado")
public void negado(){
}
public void novo() {
result.include("regraUsuarioList",daoRegra.lista());
}
}
@Component
public class UsuarioDAO {
public boolean existeUsuario(Usuario usuario) {
Usuario encontrado = (Usuario) HibernateUtil.currentSession().createCriteria(Usuario.class)
.add(Restrictions.eq("login", usuario.getLogin()))
.uniqueResult();
return encontrado != null;
}
public void adiciona(Usuario usuario) {
HibernateUtil.currentSession().save(usuario);
}
public Usuario carrega(Usuario usuario) {
return (Usuario) HibernateUtil.currentSession().createCriteria(Usuario.class)
.add(Restrictions.eq("login", usuario.getLogin()))
.add(Restrictions.eq("senha", usuario.getSenha()))
.uniqueResult();
}
}
@Component
public class RegraDAO {
public boolean existeRegra(Regra regra) {
Regra encontrada = (Regra) HibernateUtil.currentSession().createCriteria(Regra.class)
.add(Restrictions.eq("regra", regra.getRegra()))
.uniqueResult();
return encontrada != null;
}
public void adiciona(Regra regra) {
HibernateUtil.currentSession().save(regra);
}
@SuppressWarnings("unchecked")
public List<Regra> lista() {
return HibernateUtil.currentSession().createCriteria(Regra.class).list();
}
}