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