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

Como submeter uma correção no código do projeto de referência?

Encontrei bugs nas classes UsuarioRepositoryImpl e LeilaoRepositoryImpl, impedindo o correto funcionamento da remoção (DELETE) e da busca (FIND) dos novos objetos Usuario e Leilao criados ao longo do projeto, numa mesma execução dos serviços.

Descrição do problema

São feitas comparações entre dois objetos Long que sempre retornam false para números grandes!

 @Test
 public void comparaIds() {
     Long id1 = 9169117855179980407L;
     Long id2 = 9169117855179980407L;

     Assert.assertFalse(id1 == id2);
     Assert.assertTrue(id1.equals(id2));
 }

Observe que a comparação com o operador "==" parece funcionar com valores que cabem dentro de um byte (-128L a 127L). Talvez por isso o problema tenha passado desapercebido no projeto:

@Test
public void comparaIds_Pequenos() {
     Long id1 = 127L;
     Long id2 = 127L;

     Assert.assertTrue(id1 == id2);
     Assert.assertTrue(id1.equals(id2));
 }

Ajustes necessários na classe UsuarioRepositoryImpl:

(1) no método delete(Usuario entity) trocar

if (current.getId() == entity.getId()) { ... }

por

if (current.getId().equals(entity.getId())) { ... }

(2) no método public Usuario find(Long id) trocar

if (u.getId() == id) return u

por

if (u.getId().equals(id)) return u

Justificativa

A comparação entre dois objetos da classe Long normalmente retorna true para o operador "==" apenas quando os objetos correspondem à mesma instância da classe. Para comparar os valores, é preciso utilizar o método equals(Long).

Com esses ajustes, a deleção e a busca pelos novos objetos, criados com números Long randômicos, passará a funcionar.

Os ajustes necessários na classe LeilaoRepositoryImpl são idênticos.

2 respostas
solução!

Oi José, obrigado pela colaboração. Vamos providenciar para que isso seja alterado!

Obrigado, Alberto!

Aproveito para sugerir considerarem ainda algumas ideias: - mavenizar os projetos... isso facilita muito gerenciar e ajustar as versões das bibliotecas; - disponibilizar os projetos em repositórios como o GitHub, com possibilidade de encaminhar sugestões de melhoria via "Merge Requests".