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

Seto a conta com ID, eu não deveria busca-la antes?

Nesse exemplo abaixo:

Conta conta = new Conta();
conta.setId(2L);

Usando spring boot, ou outro framework que implementa hibernate/jpa, eu sempre busca uma Conta com o ID passado, é retornado do banco essa conta com os seus dados, e partir dela eu uso ela em outros momentos.

Por que nesse caso está funcionando? Eu estou criando uma conta, ou seja, uma nova instancia, e estou setando "forçadamente" o ID 2, como ele sabe que esse cara não é um objeto novo para ser cadastrado? ele não deveria falar, olha, essa instancia nova de ID 2 já existe no seu banco de dados.

Não sei se ficou claro, mas não deveria ser mais ou menos isso:

Conta conta = findContaById(2L);
// Agora eu tenho a conta de ID 2 retornada do banco para usa-la
2 respostas

O SpringBoot permite essa abordagem que você falou.

Quando você criar sua criar a interface ContaRepository você deve extender a interface CrudRepository<T, ID>, ela possuí um método findById(ID id) que resolve seu problema.

ficaria assim:

// JpaRepository extend CrudRepository e adiciona entre outras coisas paginação.
@Repository
public interface ContaRepository public extends JpaRepository<Conta, Long> {

}

Depois é só injetar esse cara no seu Service e já pode usar o findById.

solução!

Sim, eu já uso dessa forma, eu só queria entender como que o Hibernate sem o Spring Boot fez essa mágina de usar um "SetId(2L)" e ao inves de ser numa nova instancia, é um objeto do banco.

No caso, quando usamos spring boot não é possível fazer como é feito na aula correto? é preciso usar o findById do spring certo?

Fiquei curisoso rsr

Obrigado pelo retorno.