Not-null property references a null or transient value

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 ");
		}
	}
}

Pelo erro, parece que vc está tentando gravar um registro com o valor NULL para uma coluna NOT NULL: CPF

Mas quando eu vou salvar o registro o CPF não vai nulo. Eu insiro informação no campo CPF. Provavelmente eu deva ter feito o relacionamento errado pois antes de fazer os relacionamentos ele funcionava.

Estás a criar campos para copiar o nome e cpf do usuário mas, ao mesmo tempo estás a definir uma chave estrangeira para a tabela de usuários. E depois não estás nunca a preencher o valor de usuario, deixando ficar esse new Usuario que vai tentar criar um novo usuario na tabela. Mas não tem cpf (nem qualquer outro campo).

Tendo a chave estrangeira, não precisas dos campos nomeUsuario e cpfUsuario nesta entidade de locação, bastando simplesmente fazer:

Usuario novoUsuario = usuariorepo.consultarPorCPF(cpfUsuario);
Locacao novaLocacao = locacaoRepositorio.consultarPorPlaca(placa);
novaLocacao.setUsuario(novoUsuario);
2 curtidas

Olá amigo, realmente resolveu o problema. Mas agora ele não está alugando o veículo. Ele entra no catch como mostro no código abaixo.

Classe LocacaoServlet

  public class LocacaoServlet extends HttpServlet {

    RepositorioLocacao locacaoRepositorio = new RepositorioLocacao();

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

	
	String cpf = req.getParameter("cpf");
	String placa = req.getParameter("placa");
	double valorDiaria = Double.parseDouble(req.getParameter("valorDiaria"));
	int totalDias = Integer.parseInt(req.getParameter("totDias"));


	try {
		Locacao locacao = new Locacao(cpf, placa, valorDiaria, totalDias);
		LocacaoServico servico = new LocacaoServico();

		servico.alugar(cpf, placa, valorDiaria, totalDias);

		resp.setContentType("text/html");
		PrintWriter printWriter = resp.getWriter();
		printWriter.print("<html>");
		printWriter.print("<body>");
		printWriter.print("<h1>Locação efetuada Com Sucesso</h1>");
		printWriter.print("<a href= 'locacao/Fazer_Locacao.jsp'> Realizar Outra Locação</a>");
		printWriter.print("<p><a href= 'ListaLocacaoServlet'> Listar Locações</p></a>");
		printWriter.print("<p><a href= 'index.jsp'> Voltar Para o Menu Principal</p></a>");

	} catch (Exception e) {
		resp.setContentType("text/html");
		PrintWriter printWriter = resp.getWriter();
		printWriter.print("<html>");
		printWriter.print("<body>");
		printWriter.print("<h1>Locação não realizada!</h1>");
		printWriter.print("<a href= 'locacao/Fazer_Locacao.jsp'> Realizar locação movamente</a>");
		printWriter.print("<p><a href= 'ListaLocacaoServlet'> Verificar lista de locação</p></a>");
		printWriter.print("<p><a href= 'Locadora.jsp'> Voltar para o menu principal</p></a>");
	}
}

E qual a exception que está sendo lançada?

Na verdade ele não mostra exception na tela. Ele está executando normalmente. O problema é que ele não salva a locação no repositório de locação. Ele simplesmente mostra a mensagem “Locação não realizada”. Irei mostrar a mensagem do console abaixo.

mai. 18, 2021 11:26:35 AM org.hibernate.jpa.internal.util.LogHelper logPersistenceUnitInformation
INFO: HHH000204: Processing PersistenceUnitInfo [name: locadorapersistencia]
mai. 18, 2021 11:26:35 AM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure
WARN: HHH10001002: Using Hibernate built-in connection pool (not for production use!)
mai. 18, 2021 11:26:35 AM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
INFO: HHH10001005: using driver [com.mysql.cj.jdbc.Driver] at URL [jdbc:mysql://127.0.0.1:3306/locadora?serverTimezone=UTC]
mai. 18, 2021 11:26:35 AM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
INFO: HHH10001001: Connection properties: {password=****, user=root}
mai. 18, 2021 11:26:35 AM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
INFO: HHH10001003: Autocommit mode: false
mai. 18, 2021 11:26:35 AM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl$PooledConnections <init>
INFO: HHH000115: Hibernate connection pool size: 20 (min=1)
mai. 18, 2021 11:26:35 AM org.hibernate.dialect.Dialect <init>
INFO: HHH000400: Using dialect: org.hibernate.dialect.MySQL8Dialect
mai. 18, 2021 11:26:35 AM org.hibernate.resource.transaction.backend.jdbc.internal.DdlTransactionIsolatorNonJtaImpl getIsolatedConnection
INFO: HHH10001501: Connection obtained from JdbcConnectionAccess [org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess@434a09d8] for (non-JTA) DDL execution was not in auto-commit mode; the Connection 'local transaction' will be committed and the Connection will be set into auto-commit mode.
mai. 18, 2021 11:26:35 AM org.hibernate.engine.transaction.jta.platform.internal.JtaPlatformInitiator initiateService
INFO: HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform]
PLACA :: VJKL123
Hibernate: 
    select
        veiculoesp0_.placa as placa1_2_0_,
        veiculoesp0_.ano as ano2_2_0_,
        veiculoesp0_.cor as cor3_2_0_,
        veiculoesp0_.fabricante as fabrican4_2_0_,
        veiculoesp0_.modelo as modelo5_2_0_,
        veiculoesp0_.motor as motor6_2_0_,
        veiculoesp0_.arcondicionado as arcondic7_2_0_,
        veiculoesp0_.cambioAutomatico as cambioau8_2_0_,
        veiculoesp0_.tipoDirecao as tipodire9_2_0_ 
    from
        VeiculoEsportivo veiculoesp0_ 
    where
        veiculoesp0_.placa=?
mai. 18, 2021 11:26:35 AM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl$PoolState stop
INFO: HHH10001008: Cleaning up connection pool [jdbc:mysql://127.0.0.1:3306/locadora?serverTimezone=UTC]
mai. 18, 2021 11:26:35 AM org.hibernate.jpa.internal.util.LogHelper logPersistenceUnitInformation
INFO: HHH000204: Processing PersistenceUnitInfo [name: locadorapersistencia]
mai. 18, 2021 11:26:35 AM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure
WARN: HHH10001002: Using Hibernate built-in connection pool (not for production use!)
mai. 18, 2021 11:26:35 AM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
INFO: HHH10001005: using driver [com.mysql.cj.jdbc.Driver] at URL [jdbc:mysql://127.0.0.1:3306/locadora?serverTimezone=UTC]
mai. 18, 2021 11:26:35 AM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
INFO: HHH10001001: Connection properties: {password=****, user=root}
mai. 18, 2021 11:26:35 AM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
INFO: HHH10001003: Autocommit mode: false
mai. 18, 2021 11:26:35 AM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl$PooledConnections <init>
INFO: HHH000115: Hibernate connection pool size: 20 (min=1)
mai. 18, 2021 11:26:35 AM org.hibernate.dialect.Dialect <init>
INFO: HHH000400: Using dialect: org.hibernate.dialect.MySQL8Dialect
mai. 18, 2021 11:26:35 AM org.hibernate.resource.transaction.backend.jdbc.internal.DdlTransactionIsolatorNonJtaImpl getIsolatedConnection
INFO: HHH10001501: Connection obtained from JdbcConnectionAccess [org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess@335319a6] for (non-JTA) DDL execution was not in auto-commit mode; the Connection 'local transaction' will be committed and the Connection will be set into auto-commit mode.
mai. 18, 2021 11:26:35 AM org.hibernate.engine.transaction.jta.platform.internal.JtaPlatformInitiator initiateService
INFO: HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform]
PLACA :: VJKL123
Hibernate: 
    select
        veiculopas0_.placa as placa1_3_0_,
        veiculopas0_.ano as ano2_3_0_,
        veiculopas0_.cor as cor3_3_0_,
        veiculopas0_.fabricante as fabrican4_3_0_,
        veiculopas0_.modelo as modelo5_3_0_,
        veiculopas0_.motor as motor6_3_0_,
        veiculopas0_.numeroPassageiros as numeropa7_3_0_,
        veiculopas0_.tamanho as tamanho8_3_0_ 
    from
        VeiculoPasseio veiculopas0_ 
    where
        veiculopas0_.placa=?
mai. 18, 2021 11:26:35 AM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl$PoolState stop
INFO: HHH10001008: Cleaning up connection pool [jdbc:mysql://127.0.0.1:3306/locadora?serverTimezone=UTC]
mai. 18, 2021 11:26:35 AM org.hibernate.jpa.internal.util.LogHelper logPersistenceUnitInformation
INFO: HHH000204: Processing PersistenceUnitInfo [name: locadorapersistencia]
mai. 18, 2021 11:26:36 AM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure
WARN: HHH10001002: Using Hibernate built-in connection pool (not for production use!)
mai. 18, 2021 11:26:36 AM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
INFO: HHH10001005: using driver [com.mysql.cj.jdbc.Driver] at URL [jdbc:mysql://127.0.0.1:3306/locadora?serverTimezone=UTC]
mai. 18, 2021 11:26:36 AM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
INFO: HHH10001001: Connection properties: {password=****, user=root}
mai. 18, 2021 11:26:36 AM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
INFO: HHH10001003: Autocommit mode: false
mai. 18, 2021 11:26:36 AM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl$PooledConnections <init>
INFO: HHH000115: Hibernate connection pool size: 20 (min=1)
mai. 18, 2021 11:26:36 AM org.hibernate.dialect.Dialect <init>
INFO: HHH000400: Using dialect: org.hibernate.dialect.MySQL8Dialect
mai. 18, 2021 11:26:36 AM org.hibernate.resource.transaction.backend.jdbc.internal.DdlTransactionIsolatorNonJtaImpl getIsolatedConnection
INFO: HHH10001501: Connection obtained from JdbcConnectionAccess [org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess@5be7a64d] for (non-JTA) DDL execution was not in auto-commit mode; the Connection 'local transaction' will be committed and the Connection will be set into auto-commit mode.
mai. 18, 2021 11:26:36 AM org.hibernate.engine.transaction.jta.platform.internal.JtaPlatformInitiator initiateService
INFO: HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform]
Hibernate: 
    select
        usuario0_.id as id1_1_,
        usuario0_.cpf as cpf2_1_,
        usuario0_.nome as nome3_1_,
        usuario0_.telefone as telefone4_1_,
        usuario0_.email as email5_1_,
        usuario0_.senha as senha6_1_ 
    from
        Usuario usuario0_ 
    where
        usuario0_.cpf=?
mai. 18, 2021 11:26:36 AM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl$PoolState stop
INFO: HHH10001008: Cleaning up connection pool [jdbc:mysql://127.0.0.1:3306/locadora?serverTimezone=UTC]
mai. 18, 2021 11:26:36 AM org.hibernate.jpa.internal.util.LogHelper logPersistenceUnitInformation
INFO: HHH000204: Processing PersistenceUnitInfo [name: locadorapersistencia]
mai. 18, 2021 11:26:36 AM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure
WARN: HHH10001002: Using Hibernate built-in connection pool (not for production use!)
mai. 18, 2021 11:26:36 AM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
INFO: HHH10001005: using driver [com.mysql.cj.jdbc.Driver] at URL [jdbc:mysql://127.0.0.1:3306/locadora?serverTimezone=UTC]
mai. 18, 2021 11:26:36 AM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
INFO: HHH10001001: Connection properties: {password=****, user=root}
mai. 18, 2021 11:26:36 AM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
INFO: HHH10001003: Autocommit mode: false
mai. 18, 2021 11:26:36 AM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl$PooledConnections <init>
INFO: HHH000115: Hibernate connection pool size: 20 (min=1)
mai. 18, 2021 11:26:36 AM org.hibernate.dialect.Dialect <init>
INFO: HHH000400: Using dialect: org.hibernate.dialect.MySQL8Dialect
mai. 18, 2021 11:26:36 AM org.hibernate.resource.transaction.backend.jdbc.internal.DdlTransactionIsolatorNonJtaImpl getIsolatedConnection
INFO: HHH10001501: Connection obtained from JdbcConnectionAccess [org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess@54ee5f76] for (non-JTA) DDL execution was not in auto-commit mode; the Connection 'local transaction' will be committed and the Connection will be set into auto-commit mode.
mai. 18, 2021 11:26:36 AM org.hibernate.engine.transaction.jta.platform.internal.JtaPlatformInitiator initiateService
INFO: HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform]
Hibernate: 
    select
        locacao0_.codigoLocacao as codigolo1_0_,
        locacao0_.TipoVeiculo as tipoveic2_0_,
        locacao0_.cpfUsuario as cpfusuar3_0_,
        locacao0_.modeloVeiculo as modelove4_0_,
        locacao0_.nomeUsuario as nomeusua5_0_,
        locacao0_.placa as placa6_0_,
        locacao0_.totalDias as totaldia7_0_,
        locacao0_.usuario_id as usuario10_0_,
        locacao0_.valorDiaria as valordia8_0_,
        locacao0_.valorTotal as valortot9_0_ 
    from
        Locacao locacao0_ 
    where
        locacao0_.placa=?
mai. 18, 2021 11:26:36 AM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl$PoolState stop
INFO: HHH10001008: Cleaning up connection pool [jdbc:mysql://127.0.0.1:3306/locadora?serverTimezone=UTC]

Vi agora que vc não está imprimindo a exception no bloco catch. Tenta colocar:

e.printStackTrace();
1 curtida

A variável novaLocacao está retornando nulo.

18, 2021 12:18:54 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl$PoolState stop
INFO: HHH10001008: Cleaning up connection pool [jdbc:mysql://127.0.0.1:3306/locadora?serverTimezone=UTC]
java.lang.NullPointerException: Cannot invoke "com.locadora.entidade.Locacao.setUsuario(com.locadora.entidade.Usuario)" because "novaLocacao" is null
	at com.locadora.servicos.LocacaoServico.alugar(LocacaoServico.java:34)
	at com.locadora.controller.servlet.locacao.LocacaoServlet.doGet(LocacaoServlet.java:36)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:626)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
	at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:687)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357)
	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374)
	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893)
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1707)
	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	at java.base/java.lang.Thread.run(Thread.java:832)