Olá pessoal, estou com dificuldade em fazer os relacionamentos ManyToOne e OneToMany de uma locadora de veículos. Quando eu tento alugar um veículo ele mostra esse aviso:
not-null property references a null or transient value : com.locadora.entidade.Usuario.cpf.
Classe Pessoa:
@MappedSuperclass
public abstract class Pessoa implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(length = 50, nullable = false)
private long id;
@Column(length = 50, nullable = false)
private String nome;
@Column(length = 50, nullable = false, unique = true)
private String cpf;
@Column(length = 50, nullable = false)
private String telefone;
public Pessoa(String nome, String cpf, String telefone) {
this.nome = nome;
this.cpf = cpf;
this.telefone = telefone;
}
public Pessoa() {
super();
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getCpf() {
return cpf;
}
public void setCpf(String cpf) {
this.cpf = cpf;
}
public String getTelefone() {
return telefone;
}
public void setTelefone(String telefone) {
this.telefone = telefone;
}
}
Classe Usuario:
@Entity
public class Usuario extends Pessoa {
@Column(length = 50, nullable = false, unique = true)
private String email;
@Column(length = 50, nullable = false)
private String senha;
@OneToMany(mappedBy = "usuario", cascade = CascadeType.ALL)
private List<Locacao> listaLocacoes;
public Usuario() {
}
public Usuario(String nome, String cpf, String telefone, String email, String senha) {
super(nome, cpf, telefone);
this.email = email;
this.senha = senha;
}
public ArrayList<Locacao> getListaLocacoes() {
return (ArrayList<Locacao>) listaLocacoes;
}
public void setListaLocacoes(ArrayList<Locacao> listaLocacoes) {
this.listaLocacoes = listaLocacoes;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getSenha() {
return senha;
}
public void setSenha(String senha) {
this.senha = senha;
}
@Override
public String toString() {
return "Usuario" + "Nome: " + getNome() + "CPF: " + getCpf() + "Telefone: " + getTelefone();
}
}
Classe Locacao
@Entity
public class Locacao {
@Column(length = 50, nullable = false)
private String nomeUsuario;
@Column(length = 50, nullable = false)
private String modeloVeiculo;
@Column(length = 50, nullable = false)
private String cpfUsuario;
@Column(length = 50, nullable = false)
private String placa;
@Column(length = 50, nullable = false)
private double valorDiaria;
@Column(length = 50, nullable = false)
private int totalDias;
@Column(length = 50, nullable = false)
private double valorTotal;
@Column(length = 50, nullable = false)
private String TipoVeiculo;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int codigoLocacao;
@ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinColumn(name = "usuario_id", nullable = false)
private Usuario usuario = new Usuario();
public Locacao() {
}
public Locacao(String cpfUsuario, String placa, double valorDiaria, int totalDias) {
this.cpfUsuario = cpfUsuario;
this.placa = placa;
this.valorDiaria = valorDiaria;
this.totalDias = totalDias;
}
public Usuario getUsuario() {
return usuario;
}
public void setUsuario(Usuario usuario) {
this.usuario = usuario;
}
public String getNomeUsuario() {
return nomeUsuario;
}
public void setNomeUsuario(String nomeUsuario) {
this.nomeUsuario = nomeUsuario;
}
public double getValorTotal() {
return valorTotal;
}
public void setValorTotal(double valorTotal) {
this.valorTotal = valorTotal;
}
public String getModeloVeiculo() {
return modeloVeiculo;
}
public void setModeloVeiculo(String modeloVeiculo) {
this.modeloVeiculo = modeloVeiculo;
}
public String getCpfUsuario() {
return cpfUsuario;
}
public void setCpfUsuario(String cpfUsuario) {
this.cpfUsuario = cpfUsuario;
}
public String getPlaca() {
return placa;
}
public void setPlaca(String placa) {
this.placa = placa;
}
public double getValorDiaria() {
return valorDiaria;
}
public void setValorDiaria(double valorDiaria) {
this.valorDiaria = valorDiaria;
}
public int getTotalDias() {
return totalDias;
}
public void setTotalDias(int totalDias) {
this.totalDias = totalDias;
}
public int getCodigoLocacao() {
return codigoLocacao;
}
public void setCodigoLocacao(int codigoLocacao) {
this.codigoLocacao = codigoLocacao;
}
public String getTipoVeiculo() {
return TipoVeiculo;
}
public void setTipoVeiculo(String tipoVeiculo) {
TipoVeiculo = tipoVeiculo;
}
}
Classe LocacaoServico
public class LocacaoServico implements ILocacao {
RepositorioLocacao locacaoRepositorio = new RepositorioLocacao();
RepositorioVeiculoEsportivo esportivo = new RepositorioVeiculoEsportivo();
RepositorioVeiculoPasseio passeio = new RepositorioVeiculoPasseio();
RepositorioUsuario usuariorepo = new RepositorioUsuario();
@SuppressWarnings("unused")
public Veiculo alugar( String cpfUsuario, String placa, double valorDiaria, int totalDias) throws Exception {
Locacao locacao = new Locacao(cpfUsuario, placa, valorDiaria, totalDias);
VeiculoEsportivo veiculoesportivo = esportivo.consultarPorPlaca(placa);
VeiculoPasseio veiculopasseio = passeio.consultarPorPlaca(placa);
Usuario novoUsuario = usuariorepo.consultarPorCPF(cpfUsuario);
Locacao novaLocacao = locacaoRepositorio.consultarPorPlaca(placa);
locacao = validarCampos(cpfUsuario, placa, valorDiaria, totalDias);
locacao.setValorTotal(totalDias * valorDiaria);
if(novaLocacao != null) {
throw new Exception("Locação já Existe");
}
if (novoUsuario == null) {
throw new Exception("Usuário não existe");
}
if (novoUsuario != null) {
System.out.println("Usuário encontrado ");
}
if (veiculoesportivo != null) {
locacao.setNomeUsuario(novoUsuario.getNome());
locacao.setModeloVeiculo(veiculoesportivo.getModelo());
System.out.println("Veículo encontrado ");
System.out.println(" valor total da Locaçãoo " + locacao.getValorTotal());
locacao.setTipoVeiculo(TipoDeVeiculo.VEICULO_ESPORTIVO.tipo);
this.locacaoRepositorio.salvarLocacao(locacao);
System.out.println("Locação efetuada com sucesso");
return veiculoesportivo;
}
if (veiculopasseio != null) {
locacao.setNomeUsuario(novoUsuario.getNome());
locacao.setModeloVeiculo(veiculopasseio.getModelo());
System.out.println("Veículo encontrado ");
System.out.println(" valor total da Locação " + locacao.getValorTotal());
locacao.setTipoVeiculo(TipoDeVeiculo.VEICULO_PASSEIO.tipo);
this.locacaoRepositorio.salvarLocacao(locacao);
System.out.println("Locação efetuada com sucesso");
return veiculopasseio;
} else {
throw new Exception("Veículo Não Encontrado ");
}
}
}