170 похожих чатов

Всем привет! Подскажите пожалуйста. Вопрос по обновлениям (и созданиям) сущностей. Такая

ситуация:

Допустим мы хотим обновить машину, у машины есть колеса и фары...
Мы хотим заменить колёса и фары, указываем новые id колес и фар.

Во время обновления сущности (или перед обновлением) необходимо делать валидацию связынных сущностей (фар и колес, может таковых нет уже в БД).

У меня сейчас в проекте есть кастомный валидатор, в котором как раз и проверяются и фары и колёса.
Этот валидатор запускается первой строчкой в сервисе в методе updateCar (но можно его сделать конечно и через AOP, не суть)

в валидаторе метод:
void checkКолесо(Long Id) { repository.findById(1L).orElseThrow () -> new КастомнаяОшибка} (или existsById(1L) )

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

Но дело в том что после успешного прохождения проверок в валидаторе, начинается выполнятся сервис, а там в конвертере (маппере) идут setЫ сущностей, то есть опять repository.findById(1L).orElseThrow() (только уже без кастомной ошибки, т.к. оно отлавливается в валидаторе и сущность уже хранится в кеше хибернейта).

Норм вообще такой подход?)

Варианты:
1) оставить так как есть.
2) убрать поиск сущностей в валидаторе, этого достаточно в конвертерах, пусть ошибка если не нашли падает там, ничего страшного что побежит логика сервиса и где нить потом упадет, мы ведь используем транзакцию
3) оставить проверки сущностей в валидаторе, не делать проверки в конвертерах, просто в конвертерах можно использовать вариант setWheel(new Well.setId(...))

Старался более подробно и понятно описать ситуацию, хочется узнать, как правильней лучше, какой подход чаще используется)

4 ответов

15 просмотров

а можно убрать лези лоадинг чтобы впринципе в конверторах ничо не вызывалось?) Третий вариант самый адекватный

нет смысла валидировать корректность внешних ключей на этапе преобразования или в сервисах, проверки внешних ключей выполняются на этапе коммита транзакции(даже не на этапе flush'а) собирай сущность как есть и пытайся коммитить транзакцию, если не сработало - обрабатывай ошибку уже вне транзакции вот тут есть речь об этом https://youtu.be/YzOTZTt-PR0?t=2351

Похожие вопросы

Обсуждают сегодня

Мужики и девушки, привет) в Вelphi xe7 в настройках во вкладке "Editor Options" далее " Color" есть список: "Elements", открыв который мы можем настраивать отображение разных...
Kraszx
14
Добрый вечер. Есть вопрос, а может и предложение. Был у меня диалог в другой группе о делфи и я задался вопросом: "А нельзя ли в делфи цвет //коментария и {комментария} сде...
Kraszx
24
Всем привет! Подскажи, пожалуйста, как передать в TComboBox сразу значение и id записи. На Delphi я делал так: ComboBox1.Items.AddObject('Какое-то значение', Pointer(id запис...
Евгений
13
А вот это что за конструкция? Вернее, она тут нафига?
Serjone
10
Мдя, прикол, боевая сборка запускается (именно под отладчиком) после F9 примерно полторы минуты (97 секунд если быть точным). Начал копать - проблема детектится сразу - зависа...
Александр (Rouse_) Багель
38
Мужики. привет) в Вelphi xe7 в настройках во вкладке "Editor Options" далее " Color" есть список: "Elements", открыв который мы можем настраивать отображение разных элементов...
Kraszx
2
Здравствуйте, вопрос по структурам данных. Были у вас случаи, когда пришлось писать деревья или двунаправленные списки?
/ /
50
Товарищи, кто работа с iphelper? Или может я в самой логике ошибки фигачу, не пойму.... var ifTable : PMIB_IFTABLE; size, corSize: DWORD; Buffer ...
Warfarellen
4
я так понимаю, я так подозреваю, что создание такого плагина для человека, кто умеет писать плагины для делфи потребует минут 5-10 времени. но это мое подозрение. хотелось бы ...
Kraszx
7
Всем привет! Кто пользуется DevExpress, подскажите пожалуйста, реализован ли в TcxGrid в новых версиях поиск по датам как в Экселе (ну т.е. не просто список чекбоксов со значе...
A Z
4
Карта сайта