Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Como continuar incrementando o valor de uma variável após salvar no banco de dados?

Criei uma classe cliente, que além do seu ID eu preciso gerar o seu código de acordo com o ultimo registro no banco de dados. A minha dúvida é, como faço isso? Estou iniciando agora os meus estudos e travei nisso. Seguem meus códigos:

Classe cliente:

@Entity(name = "Cliente")
@Table(name = "cliente")
public class Cliente {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private Long codigo_cliente;
    private String nome;



    public Cliente(DadosCadastroCliente dto) {
        this.nome = dto.getNome();
        this.codigo_cliente = dto.getCodigo_cliente();
    }
    
    //getters e setters

DTO do cadastro do cliente:

public class DadosCadastroCliente {
    private String nome;
    private Long codigo_cliente;

    public DadosCadastroCliente() {}

    public DadosCadastroCliente(Cliente cliente) {
        this.nome = cliente.getNome();
        this.codigo_cliente = cliente.getCodigoCliente();
    }

//getters e setters

Classe service até o momento?

@Service
public class ClienteService {

    @Autowired
    private ClienteRepository repository;

    public DadosListagemCliente salvar(DadosCadastroCliente dto) {
      Cliente cliente = new Cliente(dto);
      repository.save(cliente);

      return new DadosListagemCliente(cliente);
    }

Alguém poderia me ajudar em como fazer isso?

3 respostas
solução!

Olá Natali!

Para gerar o código do cliente de acordo com o último registro no banco de dados, você pode criar uma consulta que retorne o último registro e, a partir dele, incrementar o valor do código. Por exemplo:

@Service
public class ClienteService {

    @Autowired
    private ClienteRepository repository;

    public DadosListagemCliente salvar(DadosCadastroCliente dto) {
      Cliente cliente = new Cliente(dto);

      // Consulta para obter o último registro
      Cliente ultimoCliente = repository.findTopByOrderByIdDesc();

      // Incrementa o valor do código
      if (ultimoCliente != null) {
          cliente.setCodigoCliente(ultimoCliente.getCodigoCliente() + 1);
      } else {
          cliente.setCodigoCliente(1L);
      }

      repository.save(cliente);

      return new DadosListagemCliente(cliente);
    }
}

Nesse exemplo, a consulta findTopByOrderByIdDesc() retorna o último registro ordenado pelo ID em ordem decrescente. Caso não exista nenhum registro, o valor do código será 1.

Bons estudos!

Oi Lucas,

Clareou demaaaais, mas ao fazer o meu select para a consulta do ultimo registro estou recebendo o seguinte erro:

Caused by: java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: limit near line 1, column 84 [select id from br.com.projetonotafiscal.notafiscal.Entity.Cliente order by id desc limit 1]

Meu repository:

public interface ClienteRepository extends JpaRepository<Cliente, Long> {

    @Query("select id from Cliente order by id desc limit 1")
    Cliente findTopByOrderByIdDesc();
}

O que estaria errado na minha query?

Consegui resolver alterando o select para

SELECT MAX(id) FROM Cliente