powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / JPA CASCADE
25 сообщений из 43, страница 1 из 2
JPA CASCADE
    #39300257
no56892
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: java
1.
2.
3.
4.
5.
class Entity {
   
   @OneToMany(Cascade = ALL)
   Set<OtherEntity> others;
}


Как добавить логику, если например удаляется 2 OtherEntity если используется Cascade? Т.е. в сервис приходит Entity с уже двумя удаленными OtherEntity, как в таком случае это обработать?
...
Рейтинг: 0 / 0
JPA CASCADE
    #39300265
Фотография Паша01
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если ты в объекте Entity удалил 2 OtherEntity, потом делаешь flush или commit своим EntityManager, то все, тех самых 2 OtherEntity не будет ни в памяти приложения ни в БД. После этого передаешь объект Entity в какой-нибудь сервис и не увидишь больше своих удаленных элементов в коллекции. Или я не понял твоей проблемы?
...
Рейтинг: 0 / 0
JPA CASCADE
    #39300267
no56892
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Паша01,
Допустим мне при удалении 2х ентити надо отправить емэйл
...
Рейтинг: 0 / 0
JPA CASCADE
    #39300268
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
no56892в сервис приходит Entity с уже двумя удаленными OtherEntity
кем и где удалёнными?
Тип каскада - все. Значит ВСЕ операции, в том числе с БД отслеживает маппинг и потом реализует.
Если объекты вне сессии напр. хибера, то их надо аттачить к сессии.
...
Рейтинг: 0 / 0
JPA CASCADE
    #39300272
no56892
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может так понятнее будет:
Код: java
1.
2.
3.
4.
5.
получить из сервиса Entity c others
->
сделать other.remove() два раза
->service.merge(entity);
//вот тут мне надо выполнить БЛ если удалилось 2 OtherEntity...
...
Рейтинг: 0 / 0
JPA CASCADE
    #39300274
Фотография Паша01
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так напиши свой метод removeAndSendEmails() внутри класса Entity и вызывай для удаления только его
...
Рейтинг: 0 / 0
JPA CASCADE
    #39300277
Фотография Паша01
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Неправильно выразился. Напиши этот метод removeAndSendEmails() внутри какого-то сервиса. В нем сначала удали, а потом отправь емейл. Просто замени вызовы other.remove() на entityService.removeAndSendEmails()
...
Рейтинг: 0 / 0
JPA CASCADE
    #39300278
Фотография Паша01
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Или можешь использовать ListChangeListener. Повесь его на свою коллекцию. Внутри слушателя увидишь, если произошло удаление, то отправляй емейл
...
Рейтинг: 0 / 0
JPA CASCADE
    #39300279
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
no56892Допустим мне при удалении 2х ентити надо отправить емэйл
@PostPersist
?
...
Рейтинг: 0 / 0
JPA CASCADE
    #39300283
no56892
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Там большой граф с Ентити, и помимо удаления 2х объектов Юзер еще много чего модифицирует. Как ты предлагаешь это не подходит, т.к. не будет сделано в одной транзакции раз и ты предлагаешь удалить CASCADE два.
...
Рейтинг: 0 / 0
JPA CASCADE
    #39300285
Фотография Паша01
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123no56892Допустим мне при удалении 2х ентити надо отправить емэйл
@PostPersist
?

Тогда уж @PostRemove - Executed after the entity manager remove operation is actually executed or cascaded. This call is synchronous with the remove operation.
...
Рейтинг: 0 / 0
JPA CASCADE
    #39300286
no56892
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123no56892Допустим мне при удалении 2х ентити надо отправить емэйл
@PostPersist
?
Здорово, но как я узнаю что удалилось 2 Ентити?
...
Рейтинг: 0 / 0
JPA CASCADE
    #39300291
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
no56892Здорово, но как я узнаю что удалилось 2 Ентити?
нет логики.
Что значит 2? Это сакральное число?
Тогда это бизнес-логика и делать нужно по другому.
...
Рейтинг: 0 / 0
JPA CASCADE
    #39300292
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,
вообще, нельзя на триггеры в кавычках нагружать отправку по мылу.
...
Рейтинг: 0 / 0
JPA CASCADE
    #39300293
Фотография Паша01
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С такой логикой подходит лучше всего ListChangeListener. В нем ты можешь увидеть, что удалилось именно 2 элемента.
...
Рейтинг: 0 / 0
JPA CASCADE
    #39300294
no56892
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,
Как, кроме как руками все разбирать и забить на Cascade?
...
Рейтинг: 0 / 0
JPA CASCADE
    #39300298
no56892
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Паша01С такой логикой подходит лучше всего ListChangeListener. В нем ты можешь увидеть, что удалилось именно 2 элемента.
Хибернейт свои коллекции использует.
...
Рейтинг: 0 / 0
JPA CASCADE
    #39300301
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
no56892Petro123,
Как, кроме как руками все разбирать и забить на Cascade?
не могу ответить когда постановка странная).
Что за число 2 и кто создал проблему с этим числом?
Если нужно отправлять мыло только при выписке из квартиры двоих, то проверять надо в сервисном слое где происходит выписка.
Модель данных, маппинг и каскад ни при чём.
...
Рейтинг: 0 / 0
JPA CASCADE
    #39300303
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Паша01что удалилось именно 2 элемента.
можно в триггере
Код: java
1.
2.
if select count(*) children <> 2 then
  EMAIL


))))
...
Рейтинг: 0 / 0
JPA CASCADE
    #39300312
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
no56892,
там много чего есть:
Код: java
1.
@PrePersist, @PreUpdate, @PreRemove, @PostPersist, @PostUpdate, @PostRemove


Ещё есть контекст. Посмотри что там можно посчитать про "2".
...
Рейтинг: 0 / 0
JPA CASCADE
    #39300317
Фотография Паша01
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
no56892Паша01С такой логикой подходит лучше всего ListChangeListener. В нем ты можешь увидеть, что удалилось именно 2 элемента.
Хибернейт свои коллекции использует.

Когда я юзал Eclipse Rap фреймворк, в котором использовались такие слушатели, то я мог взять объект Entity и в любом месте в приложении повесить на его поле Set<OtherEntity> others слушатель. И в слушателе делал, что мне надо было. Ты сказал, твои объекты Entity юзаются в каком-то графе. Если ты погуглишь, наверняка найдешь примеры таких слушателей и у тебя будет код выглядеть примерно как я описал ниже. И станет совсем неважно, что Хибернейт свои коллекции использует.

public void addEntityToGraph(Entity en, Graph graph) {
ObservableSet obsvSet = BeanProperies.observeSet(Entity.class, "others", typeOfOthers)
obsvSet.addValueChangeListener(new ValueChangeListener(Event diff) {
diff.newValue...
});
}
...
Рейтинг: 0 / 0
JPA CASCADE
    #39300321
Фотография Паша01
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да и вообще гугл меня приводит к http://www.glazedlists.com/
...
Рейтинг: 0 / 0
JPA CASCADE
    #39300335
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Паша01и в любом месте в приложении повесить на его поле
а если юзверь просто играется с коллекцией? Т.е. коммит - сохранить не нажимал, а идёт по мастеру страничкам в одной сессии.
Тогда зазря уйдёт по мылу сообщение об удалении 2-х объектов.
...
Рейтинг: 0 / 0
JPA CASCADE
    #39300343
Фотография Паша01
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Паша01и в любом месте в приложении повесить на его поле
а если юзверь просто играется с коллекцией? Т.е. коммит - сохранить не нажимал, а идёт по мастеру страничкам в одной сессии.
Тогда зазря уйдёт по мылу сообщение об удалении 2-х объектов.

Слушай, ты может сразу все расскажешь? Судя по твоему комментарию, ты банально можешь добавить поле oldOthersSize в Entity.
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
class Entity {
   
   @OneToMany(Cascade = ALL)
   Set<OtherEntity> others;

   @Transient
   int oldOthersSize;
}


Инициализируей его перед тем, как добавить объект Entity в свой граф. Когда юзер нажимает кнопку Сохранить, тупо сравниваешь размер текущей коллекции с переменной oldOthersSize. И все. Вот так легко узнаешь, что удалилось именно 2 элемента. Решение может и не верх элегантности, но реализуется максимум за 5 минут.
...
Рейтинг: 0 / 0
JPA CASCADE
    #39300358
Фотография Паша01
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Или ещё 2-ой вариант, более универсальный.
Если ты удалил 2 элемента коллекции others, и сохранишь это, то для объекта Entity ВРОДЕ КАК должна сработать конструкция @PostUpdate. И в нем с помощью все той же переменной oldOthersSize из примера выше узнаешь, что удалилось 2 элемента. Вот только я точно не знаю, сработает ли @PostUpdate в такой ситуации. Возьми проверь )))
...
Рейтинг: 0 / 0
25 сообщений из 43, страница 1 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / JPA CASCADE
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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