Não consigo salvar o valor total de uma coluna no banco de dados

Olá pessoal, estou brincando com java e me deparei com um probleminha. Conforme o código a seguir, eu não consigo salvar o valor total do aluguel do veículo no banco de dados. Eu sei como faz o calculo mas não sei como armazeno essa informação no banco. No método alugar, eu já tentei passar o valorTotal como parâmetro, porém quando o usuário for alugar o carro ele teria também que passar o valor total da diária do veículo.

 public Veiculo alugar(String nomeVeiculo, String cpfUsuario, String placa, double valorDiaria, int totalDias
	  ) throws Exception {

	Locacao locacao = new Locacao(nomeVeiculo, cpfUsuario, placa, valorDiaria, totalDias);
	VeiculoEsportivo veiculoesportivo = esportivo.consultarPorPlaca(placa);
	VeiculoPasseio veiculopasseio = passeio.consultarPorPlaca(placa);
	Usuario novoUsuario = usuariorepo.consultarPorCPF(cpfUsuario);

	if (novoUsuario == null) {
		throw new Exception("Usuário não existe");
	}

	if (novoUsuario != null) {
		System.out.println("Usuário encontrado ");
	}
	if (veiculoesportivo != null) {
		System.out.println("Veículo encontrado " + nomeVeiculo);
		this.locacaoRepositorio.salvarLocacao(locacao);
		return veiculoesportivo;
	}

	if (veiculopasseio != null) {
		System.out.println("Veículo encontrado " + nomeVeiculo);
		this.locacaoRepositorio.salvarLocacao(locacao);
		return veiculopasseio;

	} else {
		System.out.println("Veiculo não encontrado");
	}
	return veiculopasseio;

}

Sem%20t%C3%ADtulo
Sem%20t%C3%ADtulo1

Como está o método salvarLocacao()?

  public void salvarLocacao(Locacao locacao) {
	EntityTransaction transacao = null;
	EntityManagerFactory entityManagerFactory = null;
	EntityManager entityManager = null;
	try {
		entityManagerFactory = Persistence.createEntityManagerFactory("locadorapersistencia");
		entityManager = entityManagerFactory.createEntityManager();
		transacao = entityManager.getTransaction();
		transacao.begin();
		entityManager.persist(locacao);
		transacao.commit();

	} catch (RuntimeException e) {
		System.out.println("GerericRepository.salvar" + e.toString());
		// TODO: handle exception
		if (transacao != null)
			transacao.rollback();
		throw e;
	} finally {
		// sessao.close();
		if (entityManager != null) {
			entityManager.close();
			entityManagerFactory.close();
		}
	}

Cria um método getValorTotal na sua classe Locação.

@Column("valorTotal")
public double getValorTotal() {
    return dias * diaria;
}

Veja se funciona

Ainda não funcionou. Creio que fiz algo errado.

 @Entity
public class Locacao {
 @Column(length = 50, nullable = false)
private String modeloVeiculo;
@Column(length = 50, nullable = false, unique = true)
private String cpfUsuario;
@Column(length = 50, nullable = false, unique = true)
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;
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private int codigoLocacao;

public Locacao(String modeloVeiculo, String cpfUsuario, String placa, double valorDiaria, int totalDias) {
	this.modeloVeiculo = modeloVeiculo;
	this.cpfUsuario = cpfUsuario;
	this.placa = placa;
	this.valorDiaria = valorDiaria;
	this.totalDias = totalDias;

}

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;
}
@Column(name = "Valor_Total")
public double getValorTotal() {
    return totalDias* valorDiaria;
}

public void setValorTotal(double valorTotal) {
	this.valorTotal = valorTotal;
}

public int getCodigoLocacao() {
	return codigoLocacao;
}

public void setCodigoLocacao(int codigoLocacao) {
	this.codigoLocacao = codigoLocacao;
}

}

Essa anotação pode apagar. Até mesmo o campo eu diria.

Ainda não funcionou amigo. A coluna valorTotal até sumiu.

@Entity
 public class Locacao {
@Column(length = 50, nullable = false)
private String modeloVeiculo;
@Column(length = 50, nullable = false, unique = true)
private String cpfUsuario;
@Column(length = 50, nullable = false, unique = true)
private String placa;
@Column(length = 50, nullable = false)
private double valorDiaria;
@Column(length = 50, nullable = false)
private int totalDias;
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private int codigoLocacao;

public Locacao(String modeloVeiculo, String cpfUsuario, String placa, double valorDiaria, int totalDias) {
	this.modeloVeiculo = modeloVeiculo;
	this.cpfUsuario = cpfUsuario;
	this.placa = placa;
	this.valorDiaria = valorDiaria;
	this.totalDias = totalDias;

}

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;
}
@Column(name = "Valor_Total")
public double getValorTotal() {
    return totalDias* valorDiaria;
}

public int getCodigoLocacao() {
	return codigoLocacao;
}

public void setCodigoLocacao(int codigoLocacao) {
	this.codigoLocacao = codigoLocacao;
}

}
Sem%20t%C3%ADtulo


De acordo com essa resposta, você tem que colocar as anotações apenas nos getters ou apenas nos campos. Não pode misturar.

Então teria que mover todas as suas anotações dos campos para os getters correspondentes.

1 curtida

Consegui resolver. Bastava chamar o método set de valorTotal no método salvarLocacao. Mas movendo as anotações dos campos para os getters também iria resolver. Obrigado pela ajuda! :wink:

locacao.setValorTotal(totalDias * valorDiaria);

1 curtida