Pull to refresh
29
3.1
Григорий Кислин @gkislin

Автор онлайн обучения Java: https://javaops.ru

Send message

В spring-data-jpa проекте есть такой код:

@Repository
@Transactional(readOnly = true)
public class SimpleJpaRepository<T, ID> implements JpaRepositoryImplementation<T, ID> {
...

И есть на него закрытая бага не открывать по умолчанию транзакцию на чтение.

Возможно JPA репозиторий должен работать с разного рода вендорами баз данных и неизвестно, как они реализуют транзакционность одиночных команд типа select. Для Postgres и, судя по Discuss about the optimization, для MySQL это может быть оверхед. Ссылка в баге на Hibernate устарела, вот верная

Те мы свои кастомные getByIsbn методы чтения можем делать без транзакций, а стандартные data-jpa все равно с флагом readOnly пойдут. Можете переоткрыть issue со своими выкладками - будет аргумент для архитекторов, если протолкнуть. Но там вряд ли согласятся...

Отвечу так: текущий уровень абстракции подходит под любой проект и любое решение. Далее никто вам не мешает кастомизировать его под себя.
Например в микросервисах BaseService скорее всего будет лишним.
Про BaseEntity - я в нем выбрал @Access(AccessType.FIELD), Lombook и OpenAPI. Естественно, что Spring Data не может это внести себе в зависимости. Он предоставляет выбор всем, далее - сделай, как ты это используешь.
По поводу Mapstruct - что это фреймворк чисто для маппинга. Мой интерфейс выводит его на уровень абстракции выше его задачи - для связки сервиса и контроллера.

Коммент ниже про кастомизацию еще посмотрите:)

Можно без проблем на этом базовом коде файлы грузить. Мы же ничем не ограничиваем контроллеры и сервисы. JHipster - я ее немного пробовал, она опять про автогенерацию, насколько знаю. + если совсем не вписывается - то просто BaseService для этого контроллера не использовать....
@Rion333 - еще такой вопрос-без учета BaseService (BaseTo, BaseMapper, BaseEntity, WebUtil) - тоже синьору повредит?

Вы не поняли статьи или сути Spring Data REST, я делаю все вручную, никаких автогенераций кода. НО без дублирования кода - композиция, наследование, стратегия и дженерики.

Ну да, все верно- код выше как раз ближе всего к слою абстрации для большого монилита, можно вынести в модуль common. В Data REST кроме ресурсов на выходе делать маппинг на урове проекций очень муторно. И совсем некастомизируемо, например кэширование в сервисах или енкодинг пароля приходится чз приседания с Jackson делать. Используя абстракцию вы ничем не связаны- собственный биндинг, валидация, кэширование, настраиваемый маппинг и пр. фишки Spring, Mapstruct и просто Java кода.

См ответ выше + у нас не простой CRUD- любые методы в репозиториях и контроллерах поддерживаются. Суть - не дублировать код на основе общих методов и маппинга.

Spring Data REST - это вообще не про это
Это Hateoas, который генерит код на основе репозиториев. Там как раз невозможно ничего кастомизировать

  1. Все это очень проекто-специфично

  2. Никто не мешает отнаследоваться от BaseService и вызывать репозиторий оттуда

Это не критика, за удобство JPA приходиться платить. Обычно не критично, но, как всегда, думаю есть особые случаи.

Да. По ссылке jpa buddy посмотрите

У себя на сайте они пишут, что с hashCode от ID будут проблемы, если сначала был NULL, а затем после сохранения появился ID, сгенерированный БД:

"Once the id is generated (on its first save) the hashCode gets changed. So the HashSet looks for the entity in a different bucket and cannot find it. It wouldn’t be an issue if the id was set during the entity object creation (e.g. was a UUID set by the app), but DB-generated ids are more common."

Простите, рука дрогнула, был вопрос про сложность использования. Ответ такой:

  1. Сложно ли пользоваться Spring Data Jpa? Упрощает ли он работу?

  2. Смотрели ли вы внутрь него, как он реализован?

Я к тому, что для использования предложенного подхода вам нужно только делать код контроллера в конце статьи, что проще для понимания и использования, чем традиционный подход

Если посмотрите - сам контроллер у меня не параметризирован + есть возможность напрямую вызывать специфичные методы репозитория и настраивать маппинг. Попробуйте попользовать и жду фидбэка- что не получилось сделать

@stalkermustang
А можно поподробнее про "ИИ пройдет тест на самосознание в зеркале". Судя по картинке- уже прошло?
Где почитать?

Спасибо за комментарий! Ссылку на коллекции Kotlin добавил (https://kotlinlang.org/docs/collections-overview.html). По остальному - буду рад или ресурсам или подробному комментарию, тк на это натыкаешься уже в процессе работы, не на простой миграции.

У меня не было такой необходимости. А зачем при XML/JAXB аннотация на package? На Java курсе Работа с документами в Java (https://habr.com/ru/articles/765332/) не было такой надобности.

Средний уровень Java для начинающих на Kotlin - так подразумевалось:)

Спасибо, посмотрю на возможности

Напишу про себя:

  1. Даже работая на дядю, я всегда работал на себя. Вкладывался в себя, смотрел на проф. рост. Когда я перерастал компанию- уходил, хотя было непролсто и просили остаться.

  2. Даже работая - постоянно мониторил рынок: ск-ко я там стою, что нужно на рынке, какие тенденции

  3. На собеседования всегда ходил с удовольствием и интересом, см.2. Были иногда неприятные собеседования, безо всякой для меня пользы, но таких было немного

  4. Тестовое беру, если это мне интересно и я от него проф. вырасту.

  5. По поводу вкатиться- да, сейчас сложно, просто вывесить резюме недостаточно. Ищите пути: пришите HR, друзьям, коллегам, участвуйте в тусовках.

  6. Пет проекты нужны обязательно, если нет коммерческого опыта. Если он есть - достаточно описания своей роли и технологий в проектах, гду участвовал.

Если статья переводная, принято указывать оригинал: https://jpa-buddy.com/blog/best-practices-and-common-pitfalls/

Хорошая статья для новичков, но: есть спицификация JMM - Java Memory Model. Появилась в 5й Java, описывает доступ нескольких потоков к одному объекту. Вот например хорошая статейка: https://devsday.ru/blog/details/818
Что такое Java Process Memory Model - гугл молчит. Нашел статью на русском, полагаю с таким же неверным употреблением: https://coursebook.ru/article/item/6
Поправьте название например на Java Memory Management или структура памяти, иначе сбивает с толку

1
23 ...

Information

Rating
916-th
Location
Санкт-Петербург, Санкт-Петербург и область, Россия
Date of birth
Registered
Activity

Specialization

Specialist
Lead
Java
Git
JavaScript
Training
Coaching
Interview
Team recruitment
IT consulting