Добрый вечер.
1) Прежде всего - вместо скриншотов добавляйте сниппеты кода. Если например, придется вносить правки в ваш код, то что прикажете делать? Не перепечатывать же его со скрина.
2) Проверку на дубликаты и др. логику лучше перекинуть на сервисный слой.
Например, некий CategoryService, где обрабатывается бизнес логика, а затем в сервисном слое вызываются методы CategoryDao
3)
Насколько ок завязываться на логике выброшеного исключения?
Выбрасывайте свое кастомное исключение в сервисном слое. Например, DuplicateRecordExistsException, RecordExistsException или что-то типа такого.
Далее ловите данное исключение на уровне контроллера или controllerAdvice. А затем уже на основе выбрасываемого исключения отдавайте на клиент сообщение с http статусом. Например,
наличие дубликата это ошибка на клиенте. Соответсвенно, код ошибки 4xx (например, 400). Сообщение ошибки - Запись существует.
Прочитайте вот это -
https://spring.io/blog/2013/11/01/exception-handli...
Обратите внимание на
@ExceptionHandler
а также вот, эту главу - Global Exception Handling Using @ControllerAdvice Classes