powered by simpleCommunicator - 2.0.29     © 2024 Programmizd 02
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / Entity merge
25 сообщений из 63, страница 1 из 3
Entity merge
    #40120436
Фотография -=Koba=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как лучше обновлять entity имеющие у себя дочерние связи?

Вот например Person entity... При update
Я получаю по id нужную мне entity, проставлю новые значение и сохраняю... Тут вопрос нет

Вопрос если в Person entity есть поля например

@OneToMany
Set<BookEntity> books

И когда приходит на обновление PersonDto , мне надо
Какую-то BookEntity обновить, какую-то добавить, какую-то удалить... Грубо говоря смержить два листа

Было б это в одном месте, я б написал в конвертере такую вещь

Проблема в другом, когда мне передаётся вся иерархия PersonDto для обновления такое место не одно...

Может есть какой-то подход, как правильно обновлять такие вещи

PS пардон за форматирование, с телефона
...
Рейтинг: 0 / 0
Entity merge
    #40120439
Фотография -=Koba=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как вижу я сейчас

Писать метод, куда будет передаваться Set<Entity> , Set<Dto> и Converter<Entity, Dto>

Далее

1 бегу по Set<Entity> и ищу Id в Set<Dto>, если нахожу то такие Entity надо обновить convert.update(entity, Dto)

2 если не нахожу, то такие Entity надо удалить

3 бегу по Set<Dto> если есть Dto с I'd null, то считаю , что это новые записи и их надо создать, converter. create(dto)

И в итоге формирую уже конечный сет

Но думаю, что уже кто-то делал подобное, может есть варианты проще)
...
Рейтинг: 0 / 0
Entity merge
    #40120443
Если на минутку забыть про Hibernate, у Book обязана быть ID? Иными словами: работаем ли мы с Book вне Person? Ссылается ли еще кто-то на Book кроме него, или может мы Book по ID запрашиваем отдельно?
...
Рейтинг: 0 / 0
Entity merge
    #40120445
Фотография -=Koba=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Id это primary key из БД

Да я могу получить
Список всех книг определенного person
Или определенную книги по ее Id

Но вот обновлять надо все связке.. приходит PersonDTo
...
Рейтинг: 0 / 0
Entity merge
    #40120446
Спрошу по-другому - могли бы мы вообще удалить колонку ID из таблицы BOOKS? Например, запросить все книги Person'a можно и без нее, для этого use case'a нам колонка ID не нужна.
...
Рейтинг: 0 / 0
Entity merge
    #40120450
Фотография -=Koba=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stanislav Bashkyrtsev,

А можете немного развернуть свою мысль?
Под конец дня немного голова не соображает


Если тупо удалить, то нет не могу.. В entity надо поле, id... Чисто теоретически primary key book , может совпадать с primary key person... Книги будут уникальный для каждого человека

Или вы подталкиваеете меня в SQL бд сделать nosql
Хранить информацию о книгах в виде json напрмер
...
Рейтинг: 0 / 0
Entity merge
    #40120453
Хранить книги в JSON колонке - тоже вариант. Но опять же - только если книги составляют композицию с человеком (человек определяет жизненный цикл книги и та не существует вне человека).

Реляционный же подход в таком случае - это использовать таблицы без ID (в JPA это @ElementCollection - собсно у таких элементов нет ID). И ORM будет перезаписывать списки сам. Все сводится к тому чтоб удалить сначала все записи этого человека, а потом вставить все записи из обновленной коллекции. Т.к. на книгу больше никто не ссылается, то пересоздание записи не приводит к побочным эффектам.
...
Рейтинг: 0 / 0
Entity merge
    #40120461
Фотография -=Koba=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stanislav Bashkyrtsev,

Попробовал я ElementCollection да отлично работает, Но
Если BookEntity Содержит в себе OneToMany , то тут уже проблема начинается,

@ Embeddable yне может содержать @Id
...
Рейтинг: 0 / 0
Entity merge
    #40120462
Фотография -=Koba=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добавил два метода updateEntity

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
public interface Converter<D extends BaseDto, E extends BaseEntity> {

  default E convertDto(D dto) {
    return convertDto(dto, false);
  }

  E convertDto(D dto, boolean full);

  default Stream<E> convertDto(Set<D> dtos, boolean full) {
    return Stream.ofNullable(dtos)
        .flatMap(Collection::stream)
        .map(dto -> convertDto(dto, full));
  }

  default D convertEntity(E entity) {
    return convertEntity(entity, false);
  }

  D convertEntity(E entity, boolean full);

  default Set<D> convertEntity(Set<E> entities, boolean full) {
    return Stream.ofNullable(entities)
        .flatMap(Collection::stream)
        .map(entity -> convertEntity(entity, full))
        .collect(Collectors.toSet());
  }

  default E updateEntity(E entity, D dto, boolean full) {
    throw new UnsupportedOperationException("Current operation doesn't support");
  }

  default Stream<E> updateEntity(Set<D> dtos, Set<E> entities, boolean full) {
    return dtos.stream()
        .map(dto -> updateEntity(findEntity(entities, dto.getId()), dto, full));
  }

  private E findEntity(Set<E> entities, UUID uuid) {
    return entities.stream()
        .filter(limitSignatureEntity -> Objects.equals(limitSignatureEntity.getId(), uuid))
        .findAny()
        .orElse(null);
  }
}



Которые уже или обновляют существующие entity если id совпало, или конвертируют их в новые
...
Рейтинг: 0 / 0
Entity merge
    #40120467
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-=Koba=-
Проблема в другом, когда мне передаётся вся иерархия PersonDto для обновления такое место не одно...

Может есть какой-то подход, как правильно обновлять такие вещи

При REST таких случаев возникать не должно.
Напр
Http://sql.ru/app/person/345
Передаем персоне список книг. Дальше?
...
Рейтинг: 0 / 0
Entity merge
    #40120468
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stanislav Bashkyrtsev
человек определяет жизненный цикл книги и та не существует вне человека).
вот с этого и начинай.
Существует ли сущность книга отдельно?
А то куда то в сторону повел про встроенные книги в человеке)
...
Рейтинг: 0 / 0
Entity merge
    #40120470
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-=Koba=-
Какую-то BookEntity обновить, какую-то добавить, какую-то удалить... Грубо говоря смержить два листа

По REST merge делает клиент.
Он делает delete и передает список УДАЛЯЕМЫХ книг.
Тупо, просто и гениально))))
...
Рейтинг: 0 / 0
Entity merge
    #40120474
Фотография -=Koba=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В данном случае передается объект Person
Новым списком кнмг
...
Рейтинг: 0 / 0
Entity merge
    #40120478
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-=Koba=-
В данном случае передается объект Person
Новым списком кнмг

Говори еще яснее.
На урл Http://sql.ru/app/person/345

Передается персона с айди 346?
...
Рейтинг: 0 / 0
Entity merge
    #40120479
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-=Koba=-,
API на бэке проектируешь ты?
...
Рейтинг: 0 / 0
Entity merge
    #40120486
Фотография -=Koba=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp,

Да все верно
Http://sql.ru/app/person/345

Передается иерахические данные по персону
...
Рейтинг: 0 / 0
Entity merge
    #40120490
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-=Koba=-,
Блин, да что верно то?
Айди совпадает?
Модификаторы CRUD отпавляем?
Если отправляем по стандарту рест, тогда ты отправляешь при добавить только новые книги.
Если не отправляем, тогда ты можешь тупо удалить все что в бд и записать новое состояние книг персоны.
Ферштейн?
...
Рейтинг: 0 / 0
Entity merge
    #40120491
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-=Koba=-,
Иерархию поканаблюдаю всего два уровня человек - > книги
...
Рейтинг: 0 / 0
Entity merge
    #40120492
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-=Koba=-,
При рест у тебя API
addBook(id, person)
delBook(id, person)
updateBook(
Причем, класс персон можно не слать. При желании.
Ты вероятно пытаешься сделать метод
возьмуЧтоУгодно(барахло)
...
Рейтинг: 0 / 0
Entity merge
    #40120499
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вся проблема в том, что отталкивается от кода, а не от структуры данных.
если б нарисовал на бумажке все связи меж таблиц - не было б вопросов
...
Рейтинг: 0 / 0
Entity merge
    #40120509
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя,
Увы. Молодое поколение уже не исправить.
С другой стороны тут случай детский - Персона и его книги)))
...
Рейтинг: 0 / 0
Entity merge
    #40120512
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: java
1.
2.
3.
GET 	/device-management/devices/{id}   : Get the device information identified by "id"
PUT 	/device-management/devices/{id}   : Update the device information identified by "id"
DELETE	/device-management/devices/{id}   : Delete device by "id"
...
Рейтинг: 0 / 0
Entity merge
    #40120521
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя,
Кстати, я и в бд MERGE редко использовал. Достаточно специфическая команда.
...
Рейтинг: 0 / 0
Entity merge
    #40120899
Фотография -=Koba=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На фронте открывает форма редактировать
Добавляются все новые поля и отправляется все одним махом

Книги , машины, данные персоны итд...
...
Рейтинг: 0 / 0
Entity merge
    #40120900
Фотография -=Koba=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp,

Под merge я имел в виду смержить два листа в ручную, если нет чего из коробки
...
Рейтинг: 0 / 0
25 сообщений из 63, страница 1 из 3
Форумы / Java [игнор отключен] [закрыт для гостей] / Entity merge
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]