Boa tarde, tenho duas entidades Usuario
e Endereco
cardinalidade de OneToOne
, eu recebo esses dois objetos de um form
, todas as informações.
classe Usuario
:
package br.com.rprvidros.models;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;
@Entity
public class Usuario implements UserDetails{
private static final long serialVersionUID = 1L;
@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer id;
private String nome;
private String senha;
private String email;
private String emailAlternativo;
private String telefone;
@OneToMany(fetch=FetchType.EAGER)
private List<Role> roles = new ArrayList<Role>();
@OneToMany(mappedBy = "id", targetEntity = PedidoItem.class)
private List <Pedido> pedido;
public List<Pedido> getPedido() {
return pedido;
}
public void setPedido(List<Pedido> pedido) {
this.pedido = pedido;
}
public static long getSerialversionuid() {
return serialVersionUID;
}
public Integer getId() {
return id;
}
public String getNome() {
return nome;
}
@Override
public String toString() {
return "Usuario [id=" + id + ", nome=" + nome + ", senha=" + senha + ", email=" + email + ", emailAlternativo="
+ emailAlternativo + ", telefone=" + telefone + ", roles=" + roles + ", pedido=" + pedido + "]";
}
public void setNome(String nome) {
this.nome = nome;
}
public String getSenha() {
return senha;
}
public void setSenha(String senha) {
this.senha = senha;
}
public String getTelefone() {
return telefone;
}
public void setTelefone(String telefone) {
this.telefone = telefone;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getEmailAlternativo() {
return emailAlternativo;
}
public void setEmailAlternativo(String emailAleternativo) {
this.emailAlternativo = emailAleternativo;
}
public List<Role> getRoles() {
return roles;
}
public void setRoles(List<Role> roles) {
this.roles = roles;
}
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
// TODO Auto-generated method stub
return this.roles;
}
@Override
public String getPassword() {
// TODO Auto-generated method stub
return senha;
}
@Override
public String getUsername() {
// TODO Auto-generated method stub
return email;
}
@Override
public boolean isAccountNonExpired() {
// TODO Auto-generated method stub
return true;
}
@Override
public boolean isAccountNonLocked() {
// TODO Auto-generated method stub
return true;
}
@Override
public boolean isCredentialsNonExpired() {
// TODO Auto-generated method stub
return true;
}
@Override
public boolean isEnabled() {
// TODO Auto-generated method stub
return true;
}
public void setId(Integer id) {
this.id = id;
}
}
classe Endereco
:
package br.com.rprvidros.models;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToOne;
@Entity
public class Endereco {
@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer id;
private String cidade;
private String uf;
private String logradouro;
private Integer numero;
private String cep;
private String complemento;
@OneToOne
private Usuario usuario;
public String getCidade() {
return cidade;
}
public void setCidade(String cidade) {
this.cidade = cidade;
}
public String getUf() {
return uf;
}
public void setUf(String uf) {
this.uf = uf;
}
public String getLogradouro() {
return logradouro;
}
public void setLogradouro(String logradouro) {
this.logradouro = logradouro;
}
public Integer getNumero() {
return numero;
}
public void setNumero(Integer numero) {
this.numero = numero;
}
public String getCep() {
return cep;
}
public void setCep(String cep) {
this.cep = cep;
}
public String getComplemento() {
return complemento;
}
public void setComplemento(String complemento) {
this.complemento = complemento;
}
public void setUsuarioId(Integer id){
this.usuario.setId(id);
}
}
aqui segue o controller que recebo os objetos:
controller:
@RequestMapping(method = RequestMethod.POST)
public ModelAndView add(Usuario usuario, Endereco endereco){
BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
String encode = passwordEncoder.encode(usuario.getSenha());
usuario.setSenha(encode);
Usuario usuarioCadastrado = dao.addUsuario(usuario);
endereco.setUsuarioId(usuarioCadastrado.getId());
eDao.addEndereco(endereco);
return new ModelAndView("/rprvidros");
}
eu recebo um NullPointerException
, nessa linha ndereco.setUsuarioId(usuarioCadastrado.getId());
oq acho q faz sentido, poque ainda nao existe usuario
inserido para eu pegar o ``ìd```, mas mesmo assim acho q isso é gambiarra, deve haver algum jeito "correto" de fazer isso.
obrigado