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