Я случайно получаю что-то действительно странное в совокупной обработке Spring Data JDBC (с использованием Spring Boot 2.1 с необходимыми стартерами). Позвольте мне объяснить этот случай (я использую Lombok, хотя проблема может быть связана) ...
Это отрывок из моей сущности:
import java.util.Set;
@Data
public class Person {
@Id
private Long id;
...
private Set<Address> address;
}
Это связанный репозиторий Spring Data:
public interface PersonsRepository extends CrudRepository<Person, Long> {
}
И это тест, который не проходит:
@Autowired
private PersonsRepository personDao;
...
Person person = personDao.findById(1L).get();
Assert.assertTrue(person.getAddress().isEmpty());
person.getAddress().add(myAddress); // builder made, whatever
person = personDao.save(person);
Assert.assertEquals(1, person.getAddress().size()); // count is... 2!
Дело в том, что при отладке я обнаружил, что коллекция адресов (которая является Set) содержит ДВЕ ссылки на один и тот же экземпляр присоединенного адреса. Я не понимаю, как в итоге попадают две ссылки, и, что наиболее важно, как SET (на самом деле LinkedHashSet для записи) может обрабатывать один и тот же экземпляр ДВАЖДЫ!
person Person (id=218)
address LinkedHashSet<E> (id=228)
[0] Address (id=206)
[1] Address (id=206)
Кто-нибудь имеет представление об этой ситуации? Спасибо