Então...
è isso que não estou entendendo.
Por que eu fiz um debug e vi que na hora do save esta tudo preenchido, com excessão do id que o banco gera sozinho.
Vou postar todos os codigos que fazem parte do processo:
vamos lah?
1º pagina de cadastro
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html:html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>MZ TI - Suporte</title>
</head>
<body>
<h1 align="center">Novo Usuario</h1>
<html:form action="altUser.do" focus="user.nome">
<table border="0">
<tr>
<td><b>Nome: </b></td>
<td><html:text value="${user.nome}" property="user.nome" size="32"/></td>
</tr>
<tr>
<td><b>Area: </b></td>
<td><html:select property="idarea" >
<html:options collection="narea" property="id" labelProperty="nome" />
</html:select></td>
</tr>
<tr>
<td><b>Ramal: </b></td>
<td><html:text size="3" value="${user.ramal}" property="user.ramal"/><html:errors property=""/></td>
</tr>
<tr>
<td><b>Baia: </b></td>
<td><html:text size="2" value="${user.baia}" property="user.baia"/></td>
</tr>
</table>
<html:hidden value="${createuser.acao}" property="acao"/>
<html:hidden value="${user.id}" property="user.id"/>
<html:submit value="Cadastrar" property="btenviar"/>
</html:form>
<p>
<font size="-2" color="red">
<b><html:errors/></b>
</font>
</p>
</body>
</html:html>
2º Formulario
package form;
import MZSuporte.dao.DaoFactory;
import MZSuporte.model.Area;
import MZSuporte.model.Usuarios;
import java.sql.SQLException;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts.action.*;
public class NewUserForm extends ActionForm {
private Usuarios user = new Usuarios();
private String idarea;
private String btenviar;
private String acao;
public String getIdarea() {
return idarea;
}
public void setIdarea(String idarea) {
this.idarea = idarea;
}
public void setUser(Usuarios user) {
this.user = user;
}
public Usuarios getUser() {
Area a = new Area();
a.setId(this.idarea);
this.user.setArea(a);
return user;
}
public String getAcao() {
return acao;
}
public void setAcao(String acao) {
this.acao = acao;
}
public String getBtenviar() {
return btenviar;
}
public void setBtenviar(String btenviar) {
if (btenviar.equals("Alterar")) {
this.acao = btenviar;
}
if (btenviar.equals("Excluir")) {
this.acao = btenviar;
}
this.btenviar = btenviar;
}
@Override
public ActionErrors validate(ActionMapping action, HttpServletRequest request) {
ActionErrors erros = new ActionErrors();
if (this.btenviar.equals("Alterar") || this.btenviar.equals("Excluir")) {
try{
DaoFactory dao = new DaoFactory();
this.user = dao.getUsuariosDAO().read(this.user.getId());
} catch (SQLException e){
System.out.println(e.getMessage());
}
} else {
if (this.user.getNome() == null || this.user.getNome().equals("")) {
erros.add("nome", new ActionMessage("erro.campoNome"));
}
if (this.user.getRamal() != null || this.user.getRamal().equals("")) {
if (!isNumber(user.getRamal())) {
erros.add("ramal", new ActionMessage("erro.campoRamal"));
}
}
if (this.user.getBaia() != null || user.getBaia().equals("")) {
if (!isNumber(user.getBaia())) {
erros.add("baia", new ActionMessage("erro.campoBaia"));
}
}
}
return erros;
}
public Boolean isNumber(String id) {
try {
int n = Integer.parseInt(id);
return true;
} catch (Exception e) {
return false;
}
}
}
3º: Action
package action;
import form.*;
import javax.servlet.http.*;
import org.apache.struts.action.*;
import MZSuporte.dao.*;
import MZSuporte.model.*;
public class NUserAction extends Action {
@Override
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
NewUserForm userform = (NewUserForm) form;
Usuarios user = userform.getUser();
HttpSession session = request.getSession();
ActionMessages erro = new ActionMessages();
BaiaDAO bdao = new BaiaDAO();
DaoFactory dao = new DaoFactory();
int i = 0;
if (!dao.getUsuariosDAO().existsRamal(user.getRamal())) {
erro.add("create.erro", new ActionMessage("Ramal inexistente!", false));
i++;
}
if (!bdao.exists(user.getBaia())) {
erro.add("create.erro", new ActionMessage("Baia inexistente!", false));
i++;
}
if (i == 0) {
request.setAttribute("createuser", userform);
if (userform.getBtenviar().equals("Alterar")) {
Usuarios u = dao.getUsuariosDAO().read(user.getId());
session.setAttribute("user", u);
return mapping.findForward("altuser");
} else if (userform.getBtenviar().equals("Excluir")) {
Usuarios u = dao.getUsuariosDAO().read(user.getId());
request.setAttribute("user", user);
String acao = "excluido";
request.setAttribute("acao", acao);
return mapping.findForward("okuser");
} else {
String acao = null;
if (userform.getAcao().equals("Alterar")) {
dao.getUsuariosDAO().update(user);
acao = "alterado";
request.setAttribute("acao", acao);
} else {
dao.beginTransaction();
dao.getUsuariosDAO().create(user);
dao.commit();
dao.close();
acao = "cadastrado";
request.setAttribute("acao", acao);
}
request.setAttribute("user", user);
return mapping.findForward("okuser");
}
} else {
saveErrors(request, erro);
return mapping.findForward("erro_newuser");
}
}
}
Se quiserem olhar mais algum podem dizer.
Mas então, olhando no debug chega tudo certo ai ela salva e depois na hora do commit ele me traz esse erro.
Talvez seja algo no mapeamento??
segue as classes
Usuarios
package MZSuporte.model;
import java.io.Serializable;
import javax.persistence.*;
import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;
import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;
@Entity
@Table(name = "usuarios")
public class Usuarios implements Serializable {
@Id
@GeneratedValue
private String id;
private String nome;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "area")
@Fetch(FetchMode.JOIN)
@Cascade(CascadeType.SAVE_UPDATE)
private Area area;
private String ramal;
private String baia;
//getters & setters
}
Area
package MZSuporte.model;
import java.util.ArrayList;
import java.util.Collection;
import javax.persistence.*;
import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;
@Entity
@Table(name = "area")
public class Area implements java.io.Serializable {
@Id
@GeneratedValue
private String id;
private String nome;
private String area;
@OneToMany(mappedBy="area", fetch = FetchType.LAZY)
@Cascade(CascadeType.ALL)
private Collection<Usuarios> usuarios;
//getters & setters
}