В итоге я столкнулся с чем-то действительно странным в агрегатной обработке 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)
Кто-нибудь знает, что этоситуация?Thx