Задать вопрос
@Wan-Derer
Зобанели на Хабре, волки́ ;((

Spring Boot Data JPA, как добавить логику при чтении объекта из базы?

Всем привет!
Есть Entity, в котором есть поле Integer. Хотелось бы добавить проверку значения, которое поднимается из БД и некоторую свою логику. Например, если в БД null писать в поле 0 (ноль).
Пробовал добавлять сеттер и конструктор с этой логикой, но ничего не получилось, видимо Spring использует Reflection или ещё каку диковину :)
В принципе, можно было бы добавить геттер и отдавать программе значение с подменой, но это поле является ключом для другого, которое ManyToOne, поэтому такой путь не подходит.

Что можно сделать? Предлагает ли Spring какой-то способ решения данной задачи?
  • Вопрос задан
  • 102 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 1
@Wan-Derer Автор вопроса
Зобанели на Хабре, волки́ ;((
В общем, решил добавлением дополнительного сервисного класса, который берёт объекты из репозитория и преобразует как надо, а основная программа уже получает готовые объекты из него. Что есть правильно ибо преобразование - это уже бизнес-логика и не надо её мешать с DAO. Самое смищное что это и есть Спринг-Путь и это описано во всех учебниках. А я чёт затупил :) Ну, ничего: понимание ведёт к запоминанию, в следующий раз буду умнее :)
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
xez
@xez Куратор тега Java
TL Junior Roo
Просто укажите свойство для этой колонки в БД: not null default 0
Ответ написан
BorLaze
@BorLaze
Java developer
Создай метод с аннотацией @PostLoad

Но, должен предостеречь, твой подход не без подводных камней.

Если ты превращаешь null в 0, то EntityManager тут же начинает трактовать запись как измененную. И при выходе из зоны видимости будет писать ее обратно в БД.

Так что можешь получить нехилую просадку в производительности и долго удивляться "почему тормозит все, я же просто запись вычитал!"

И еще...
В принципе, можно было бы добавить геттер и отдавать программе значение с подменой, но это поле является ключом для другого, которое ManyToOne, поэтому такой путь не подходит.


На это поле кто-то ссылается или оно ссылается на кого-то? Что бы ты там вместо null не написал, это будет значимо для референса. Даже если это 0. Ты уверен, что тебе это надо?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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