powered by simpleCommunicator - 2.0.18     © 2024 Programmizd 02
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / Unique constraints и обновление OneToMany
18 сообщений из 18, страница 1 из 1
Unique constraints и обновление OneToMany
    #40132893
Фотография -=Koba=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
public class LimitEntity {
...
  @OneToMany(mappedBy = "limit", orphanRemoval = true, cascade = CascadeType.ALL)
  private Set<LimitRangeEntity> limitRanges = new HashSet<>();
...
}

public class LimitRangeEntity {
...
  @ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH, CascadeType.DETACH})
  @JoinColumn(name = "limit_id", nullable = false)
  private LimitEntity limit;

  private int position;
...
}



Суть проблемы в таблие LimitRangeEntity стоит ограничение на уникальность по limit_id & postion


Клиент изменяет список LimitRangeEntity
Для примера удаляет первую запись, а в других автомтаически меняется position

То у меня при попытке сохранить такой измененный LimitEntity возникает error связанная Unique constraints

Я нашел похожую проблему

https://stackoverflow.com/questions/24724152/jpa-clear-collection-and-add-new-items

Как и пишет Vlad Mihalcea , я пробовал в тесте разить на две операции Delete & Update все работает
Но есть ли решения в рамках одной транзакции?

Проводить анализ, что изменилось в DTO Limit приходящем со стороны фронт LimitEntity и из БД
Теоретическии можно, но много вложенностей

Если еще идеи?

на крайняк буду снимать constraints
...
Рейтинг: 0 / 0
Unique constraints и обновление OneToMany
    #40132902
Если управляющая сторона - это LimitEntity, то обновление элементов коллекции (limit_id) и изменение самого LimitRangeEntity - это две разные SQL операции. Для того чтоб изменить состав коллекции нужно собсно удалить/добавить элемент в нее.

Если управляющая сторона - это LimitRangeEntity (надо с другой стороны проставить mappedBy), то на все ее обновления (position, limit_id) будет один UPDATE. Но тогда чтоб связать эти две сущности нужно limitRangeEntity.setLimit(limitEntity). При этом изменение коллекции со стороны LimitEntity не будет ни к каким SQL операциям приводить.

Т.е. второй способ с mappedBy решит твою проблему.
...
Рейтинг: 0 / 0
Unique constraints и обновление OneToMany
    #40132906
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-=Koba=-
Для примера удаляет первую запись, а в других автомтаически меняется posi
тормоза будут. Некрасиво. Удалятся могут сразу пачкой
...
Рейтинг: 0 / 0
Unique constraints и обновление OneToMany
    #40132920
Фотография -=Koba=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stanislav Bashkyrtsev
Если управляющая сторона - это LimitEntity, то обновление элементов коллекции (limit_id) и изменение самого LimitRangeEntity - это две разные SQL операции. Для того чтоб изменить состав коллекции нужно собсно удалить/добавить элемент в нее.

Если управляющая сторона - это LimitRangeEntity (надо с другой стороны проставить mappedBy), то на все ее обновления (position, limit_id) будет один UPDATE. Но тогда чтоб связать эти две сущности нужно limitRangeEntity.setLimit(limitEntity). При этом изменение коллекции со стороны LimitEntity не будет ни к каким SQL операциям приводить.

Т.е. второй способ с mappedBy решит твою проблему.


Да сейчас сверху стоит LimitEntity он содержит 1 - много LimitRangeEntity, который в свою очередь тоже может содежрать
1 - много LimitSubRangeEntity


Получается что-то 2-ого дерева

И отследить что-где удалилось немного проблематично
...
Рейтинг: 0 / 0
Unique constraints и обновление OneToMany
    #40132923
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-=Koba=-
на две операции Delete & Update все работает
Но есть ли решения в рамках одной транзакции?
и что плохого если работает?
Много транзакций всегда можно в одну при желании.
Constraints можно тоже снимать так как ОРМ. За целостностью следит хибер и руки.
...
Рейтинг: 0 / 0
Unique constraints и обновление OneToMany
    #40132926
Фотография -=Koba=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
-=Koba=-
на две операции Delete & Update все работает
Но есть ли решения в рамках одной транзакции?
и что плохого если работает?
Много транзакций всегда можно в одну при желании.
Constraints можно тоже снимать так как ОРМ. За целостностью следит хибер и руки.


Я понимаю что ничего плохого нет
Но мне надо найти измения в DTO & Entity

Я отдаю на фронт например
Код: java
1.
2.
3.
4.
5.
LimitDto = 111
LimitRangeDto = (1,111,0,Name 1)
LimitRangeDto = (2,111,1,Name 2)
LimitRangeDto = (3,111,2,Name 3)
LimitRangeDto = (4,111,3,Name 4)



Фронт удаляет одну запись и удаляет новую
Код: java
1.
2.
3.
4.
5.
LimitDto = 111
LimitRangeDto = (2,111,0,Name 2)
LimitRangeDto = (3,111,1,Name 3)
LimitRangeDto = (4,111,2,Name 4)
LimitRangeDto = (...,111,3,Name 5)



Мне надо найти что между Новым объектом и страым отсутсвует - LimitRangeDto = (1,111,0,Name 1)
Выполнить удаление

далее обновить оставшиеся LimitRangeDto и добавить новую LimitRangeDto = (...,111,3,Name 5)
И сохранить

Просто вложенность большая ...
...
Рейтинг: 0 / 0
Unique constraints и обновление OneToMany
    #40132930
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-=Koba=-,

Это нарушение REST.
Было в прошлой теме.
Не пиши Г. код
...
Рейтинг: 0 / 0
Unique constraints и обновление OneToMany
    #40132932
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-=Koba=-,
Если уже обсуждали, зачем прикидываться что вопрос новый.
...
Рейтинг: 0 / 0
Unique constraints и обновление OneToMany
    #40132933
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Удаляй всю бд и заливай новые данные. Это импорт а не REST
...
Рейтинг: 0 / 0
Unique constraints и обновление OneToMany
    #40132934
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуй сделать merge на дереве. Быстрее сдохнуть.
...
Рейтинг: 0 / 0
Unique constraints и обновление OneToMany
    #40132938
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-=Koba=-
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
public class LimitEntity {
...
  @OneToMany(mappedBy = "limit", orphanRemoval = true, cascade = CascadeType.ALL)
  private Set<LimitRangeEntity> limitRanges = new HashSet<>();
...
}

public class LimitRangeEntity {
...
  @ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH, CascadeType.DETACH})
  @JoinColumn(name = "limit_id", nullable = false)
  private LimitEntity limit;

  private int position;
...
}




для вашего сценария работы должна быть другая модель данных: @OneToMany Set<LimitRangeEntity> должно быть на самом деле @ElementCollection, а LimitRangeEntity - @Embeddable
...
Рейтинг: 0 / 0
Unique constraints и обновление OneToMany
    #40132967
Фотография -=Koba=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp,

Я не совсем понимаю в чём нарушение
В том что дто может содержать вложенные данные?

У меня затык что они динамически добавляются и удаляются.

Но заказчик не пойдет на то, чтоб crud операции ставить на каждый уровень


По сути это таблица с subdetails
Она приходит сразу в виде json и уходит в виде json

Таблицы конечно громко сказано


Table


Row1
--Sub1---Sub2

Row1
--Sub1---Sub2---Sub3


Вот и получается
Что есть Entity которая содержитмассив Entity, а тот в свою очередь ещё массив

Если я б мог работать,. С каждой Entityпо отдельности, не задавал такие вопросы
...
Рейтинг: 0 / 0
Unique constraints и обновление OneToMany
    #40132970
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Заведи просто в таблице пол Json. Если он - атомарен - то и никаких нарушений модели не будет.
...
Рейтинг: 0 / 0
Unique constraints и обновление OneToMany
    #40133000
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-=Koba=-
Но заказчик не пойдет на то, чтоб crud операции ставить на каждый уровень
с этого и начинай.
- заказчику какое вообще дело до API?
- твоя задача донести до него что объект это сущность. Каждая сущность это таблица. Сущность это ресурс в урл и следовательно CRUD над сущностями.
Сейчас у тебя так. Вместо:
addRole(
delRole(
addRoles(
У тебя ЗАКАЗЧИК ХОЧЕТ:
save(хрен знает что в json)
...
Рейтинг: 0 / 0
Unique constraints и обновление OneToMany
    #40133002
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-=Koba=-
Она приходит сразу в виде json и уходит в виде json
уже сказали. Храни json в поле.
А если нет, тогда не ври что у тебя "приходит и уходит".
"Модель данных" - с этого в ВУЗЕ начинают.

Row1
--Sub1---Sub2

Row1
--Sub1---Sub2---Sub3

Подробнее! Пример данных. Что выделил для сущностей.
Так как сущности выделяют по БЛ а не по веточкам дерева.
...
Пол года прошло а ты все никак не разговариваешь и только топчешься на месте.
Может тебе и REST противопоказан.
Imho
...
Рейтинг: 0 / 0
Unique constraints и обновление OneToMany
    #40133003
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
Row1
--Sub1---Sub2
пример:
Один ко многим, Юзверь - - > Заказы.
Делается по REST урл app/users и app/users/1234/orders
Неужели это непонятно?
Первый класс вторая четверть...
Ждем модель данных.
...
Рейтинг: 0 / 0
Unique constraints и обновление OneToMany
    #40133004
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-=Koba=-
Но заказчик
приводи его сюда.
Пусть расскажет НА ЧТО он делит все API в таком случае.
Если уровни вместе, операции вместе, сущности вместе.
Это прямо анекдот получается.
...
Рейтинг: 0 / 0
Unique constraints и обновление OneToMany
    #40133545
adminDontSleep
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
-=Koba=-

Для примера удаляет первую запись, а в других автомтаически меняется position


какой то сумбур в голове ,не подскажете грешным делом ,как во множестве вы сумели найти "первую запись")))

я тебе коба уже тысячу раз писал - начни с азов - алгоритмы и структуры данных -хотя бы те,которые используются в java


чтобы не возникал Unique конфликт ты должен перепределить хеш и иквелс методы ,тогда и в множество положить не получится дубли
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Unique constraints и обновление OneToMany
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали тему (1): Анонимы (1)
Читали форум (1): Анонимы (1)
Пользователи онлайн (8): Анонимы (5), Google Bot, Yandex Bot, Bing Bot 1 мин.
x
x
Закрыть


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