Spring HATEOAS, как обрабатывать ссылки преобразования в объекты без затопления базы данных

#spring #spring-boot #spring-data-rest #spring-hateoas

#spring #spring-boot #spring-data-rest #spring-hateoas

Вопрос:

Я использую Spring boot 2.3, Spring Data REST, Spring HATEOAS, спящий режим. Давайте рассмотрим простой вариант использования, например, пользователь, создающий счет-фактуру в веб-клиенте, или список запасов для склада. Когда пользователь отправляет форму, могут быть отправлены сотни или строки, и эти строки могут содержать ссылки на другие объекты.

Например, в случае счета-фактуры каждая строка может содержать ссылку на продукт, которая будет передана серверу в качестве ссылки.

Эта ссылка преобразуется Spring в объект с помощью Repository . Я хочу сказать, что для каждой строки выполняется запрос для получения продукта. Это означает, что во время вставки все будет очень медленно (проблема выбора n 1).

Возможно, я что-то пропустил в логике, но я не видел конкретных примеров, которые фокусируются на том, как обрабатывать большое количество переводов link -> entity.

У вас есть какой-либо намек на это?

Ответ №1:

Ваша точка зрения о многих объектах, которые будут созданы, если связанные объекты будут возвращены на сервер? Спящий режим (как и spring) имеет механизм отложенной загрузки — https://blog.ippon.tech/boost-the-performance-of-your-spring-data-jpa-application /, поэтому будут заполнены только необходимые объекты. Пожалуйста, поправьте меня, если я не понимаю ваших вопросов.

Комментарии:

1. На самом деле это не то, что я имел в виду. Мне нужно сохранить 100 строк для счета. 100 строк со 100 различными продуктами, ценами и т.д. Я не могу использовать отложенную загрузку, потому что для сохранения строк в БД мне нужен объект product. Как только ссылка, подобная myapp.com/api/v1/products/1 при поступлении на сервер выполняется ВЫБОР для извлечения продукта. Это делается 100 раз, если у меня есть 100 разных продуктов. Это то, чего я хотел бы избежать.

2. Понял вашу точку зрения; этого не произойдет, потому что, если вы будете использовать hibernate и правильно настроите объекты, тогда hibernate создаст соединение между таблицами и извлечет 100 записей из таблицы объединения (с заполненными там полями). Другими словами, если вы собираетесь использовать репозиторий JPA, вы можете самостоятельно создать пользовательский запрос, чтобы определить, какие значения возвращать из базы данных (через параметр @Query)

3. Я должен создать что-то пользовательское, я прав? Это не выходит из коробки с Spring HATEOAS, Spring Data REST и Hibernate….

4. Если вы правильно определите свою модель данных с помощью spring data, вы получите ее из коробки; вот простой пример — baeldung.com/spring-data-rest-relationships