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

Popular posts from this blog

c++ - OpenCV Error: Assertion failed <scn == 3 ::scn == 4> in unknown function, -

php - render data via PDO::FETCH_FUNC vs loop -

The canvas has been tainted by cross-origin data in chrome only -