@turdubekov
Студент

Как обновит массив объектов в spring boot?

У меня есть сущность Address, в нем имеется еще другая сущность.
проблема заключается в том что, при обновлении сущности address, все элементы листа address равны последнему элементу в листе.
Что тут не так?

@Entity
@Builder
@AllArgsConstructor
@NoArgsConstructor
@JsonNaming(PropertyNamingStrategies.UpperSnakeCaseStrategy.class)
public class Address {

    @Id
    @GeneratedValue(generator = "UUID")
    @GenericGenerator(
            name="UUID",
            strategy = "org.hibernate.id.UUIDGenerator"
    )
    @Column(insertable = false, updatable = false)
    private UUID id;

    @OneToOne(cascade=CascadeType.ALL, fetch = FetchType.EAGER)
    @JoinColumn(name = "depart_id", referencedColumnName = "id")
    private Depart depart;

    private String code;
    private String name;
    private String phone;
}


обновление:
for (Address address : users.getAddress()) {
                for (Address address2 : addressList) {
                    address2.getDepart().setName(address.getDepart().getName());
                    address2.getDepart().setCode(address.getDepart().getCode());

                    address2.setName(address.getName());
                    address2.setPhone(address.getPhone());
                }
            }
  • Вопрос задан
  • 79 просмотров
Решения вопроса 1
azerphoenix
@azerphoenix Куратор тега Java
Java Software Engineer
Добрый день.
Ну во-первых, вам не нужно итерировать по старой и новой коллекции.
Вы можете либо воспользоваться методом addAll(). либо же раз решили итерировать, то
создать методы add() и remove()
Прочитайте эту статью:
https://vladmihalcea.com/the-best-way-to-map-a-one...
Для более полного ответа нужно увидеть весь код. Например, вы указали вот, эту строку в комментарии:
List<Address> addressList = oldUser.getAddress()
Тут либо действительно проблема. либо метод назван неправильно, так как getAddress() подразумевает получение одного адреса, а не списка адресов пользователя. Должно быть getAddresses(), ну а метод getAddress() должен возвращать 1 адрес
Рекомендую поставить брейкпоинты и провести дебаг
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы