java - Spring Hibernate not-null property references a null or transient value: com.klisman.model.Usuario.estadoId -
if try register new user in system getting exception
@entity @table(name = "usuario") public class usuario implements serializable { private static final long serialversionuid = 1l; @id @generatedvalue(strategy = generationtype.identity) @basic(optional = false) @column(name = "id") private integer id; @column(name = "nome") private string nome; @column(name = "email") private string email; @column(name = "senha") private string senha; @joincolumn(name = "estado_id", referencedcolumnname = "id") @manytoone(optional = false) private estado estadoid; @joincolumn(name = "tipo_id", referencedcolumnname = "id") @manytoone(optional = false) private tipo tipoid;
tipo
@entity @table(name = "tipo") public class tipo implements serializable { private static final long serialversionuid = 1l; @id @generatedvalue(strategy = generationtype.identity) @basic(optional = false) @column(name = "id") private integer id; @column(name = "nome") private string nome; @onetomany(cascade = cascadetype.all, mappedby = "tipoid") private list<usuario> usuariolist;</code>
estado
@entity @table(name = "estado") public class estado implements serializable { private static final long serialversionuid = 1l; @id @generatedvalue(strategy = generationtype.identity) @basic(optional = false) @column(name = "id") private integer id; @column(name = "nome") private string nome; @onetomany(cascade = cascadetype.all, mappedby = "estadoid") private list<usuario> usuariolist;
dao
@repository public class usuariodaoimpl implements usuariodao { @autowired private sessionfactory session; @override public void add(usuario usuario) { session.getcurrentsession().save(usuario); }
service spring
@service public class usuarioserviceimpl implements usuarioservice { @autowired private usuariodao usuariodao; @transactional public void add(usuario usuario) { usuariodao.add(usuario); }
usuariocontroller
@controller public class usuariocontroller { @autowired private usuarioservice usuarioservice; @requestmapping("/usuario") public string setupform(map<string, object> map) { usuario usuario = new usuario(); map.put("usuario", usuario); map.put("usuariolist", usuarioservice.getallusuario()); return "usuario"; } @requestmapping(value = "/usuario.do", method = requestmethod.post) public string doactions(@modelattribute usuario usuario, bindingresult result, @requestparam string action, map<string, object> map) { usuario usuarioresult = new usuario(); switch (action.tolowercase()) { case "cadastrar": usuarioservice.add(usuario); usuarioresult = usuario; break; case "alterar": usuarioservice.edit(usuario); usuarioresult = usuario; break; case "excluir": usuarioservice.delete(usuario.getid()); usuarioresult = new usuario(); break; case "pesquisar": usuario searchedusuario = usuarioservice .getusuario(usuario.getid()); usuarioresult = searchedusuario != null ? searchedusuario : new usuario(); break; } map.put("usuario", usuarioresult); map.put("usuariolist", usuarioservice.getallusuario()); return "usuario"; } }
page
<form:form action="usuario.do" method="post" commandname="usuario"> <table> <tr> <td>nome</td> <td><form:input path="nome"/></td> </tr> <tr> <td>email</td> <td><form:input path="email"/></td> </tr> <tr> <td>senha</td> <td><form:input path="senha"/></td> </tr> <tr> <td>tipo</td> <td><form:input path="tipoid"/></td> </tr> <tr> <td>estado</td> <td><form:input path="estadoid"/></td> </tr> <tr> <td colspan="2"> <input type = "submit" name="action" value="cadastrar" /> <input type = "submit" name="action" value="alterar" /> <input type = "submit" name="action" value="excluir" /> <input type = "submit" name="action" value="pesquisar" /> </tr> </table> </form:form>
the project list fine if try register new user
not-null property references null or transient value: com.klisman.model.usuario.estadoid`
thanks attention
your problem being caused because aren't setting estado
object usuario
object. because joining around estado
object's id , making relationship required (with @manytoone(optional=false)
annotation), hibernate refusing save usuario
object because estado
object missing off it.
in service layer need similar following:
@transactional public void add(usuario usuario, estado estado, tipo tipo) { usuario.setestado(estado); usuario.settipo(tipo); usuariodao.add(usuario); }
the above should succeed, assuming have correct estado
, tipo
objects passed in. assuming estado
, tipo
objects exist in database, , fetched them using id's, if don't need reverse directions of cascades created cascade when save usuario
object.
edit 1: i'm not going give complete example mean this:
@controller public class controller { @autowired private estadoservice estadoservice; @autowired private tiposervice tiposervice; @autowired private usuarioservice usuarioservice;
then use other services estado
, tipo
objects need saved on usuario
object, add them it, save usuario
object.
Comments
Post a Comment