JPA не удаляет дочерние элементы при обновлении родителя в веб-приложении

Сущность «Автор» имеет набор объектов Advertising (двунаправленное отношение «один-ко-многим») и набор объектов «Телефон» (однонаправленное отношение «один-ко-многим»).

Автор

public class Author {

    @Id
    @GeneratedValue
    private int id;

    private String nameOfAuthor; 

    @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)  
    @JoinTable(name = "author_phone",
            joinColumns = @JoinColumn(name = "author_fk_id"),
            inverseJoinColumns = @JoinColumn(name = "phone_fk_id"))
    @Fetch(FetchMode.SELECT)
    private List<Phone> phones = new LinkedList<>();

    @OneToMany(mappedBy = "author", cascade = CascadeType.ALL,
                orphanRemoval = true, fetch = FetchType.EAGER)
        private List<Advertisement> advertisements = new ArrayList<>();
    }

Телефон

public class Phone {

    @Id
    @GeneratedValue
    private int id;

    @Column(name = "phone_number")
    private String phoneNumber;
}

Рекламное объявление

public class Advertisement {

    @Id
    @GeneratedValue
    private int id;

    private String name;

    @ManyToOne
    @JoinColumn(name = "advert_author_id_fk")
    @Fetch(FetchMode.JOIN)
    private Author author;
}

Способ сохранения автора:

public void add(Author author) {             

        em.persist(author);
    }

Способ обновления Автор:

@PersistenceContext
private EntityManager em;
public void update(Author author) {
    Author merge = em.merge(author);
    em.persist(merge);    
}

Когда я отправляю json для обновления, существующего в авторе базы данных, например:

{
  "id": 2,
  "nameOfAuthor": "Segey",
  "advertisements": [],
    "phones":[]
}

Json для сохранения автора:

{
  "nameOfAuthor": "Segey",

  "advertisements":[],
  "phones":[
    {
    "phoneNumber": "33333"
    }
    ]
}

Я не знаю, почему JPA удаляет все phones, но не advertisements.

@pirho, да, использую Hibernate, добавляю описания классов

Andrew Valevskiy 21.10.2018 13:35

Почему за столом?

pirho 21.10.2018 13:39

@pirho, потому что мне нужны однонаправленные отношения "один ко многим" между автором и телефоном

Andrew Valevskiy 21.10.2018 13:48

Это означает, что вы не хотите / по какой-то причине невозможно добавить Author в Phone?

pirho 21.10.2018 13:50

@pirho Мне не нужен автор поля в классе Phone

Andrew Valevskiy 21.10.2018 13:54

@pirho Я добавил метод сохранения автора. Согласитесь с вашим комментарием об удалении вызова метода сохранения EntityManager.

Andrew Valevskiy 21.10.2018 16:15

Я имел в виду, что когда вы передаете автора параметра методу: как вы создаете автора перед обновлением.

pirho 21.10.2018 16:18

@pirho Добавлен json в код

Andrew Valevskiy 21.10.2018 17:07

@pirho И после сохранения автора я сохранил рекламу через JSON

Andrew Valevskiy 21.10.2018 17:20

Так это исходит от какого-то контроллера Spring или около того? Экземпляр автора?

pirho 21.10.2018 17:36

@priho да, это исходит от контроллера, а контроллер получает его через привязку из JSON

Andrew Valevskiy 22.10.2018 07:08
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
11
52
0

Другие вопросы по теме