В чем разница между DTO и javax.persistence.cache.retrieveMode BYPASS? - PullRequest
0 голосов
/ 02 февраля 2019

Согласно документации hibernate.

DTO возвращает неуправляемые объекты, а назначение BYPASS для javax.persistence.cache.retrieveMode означает, что кэш будет игнорироваться ...

ВОПРОС: В чем разница?

Ответы [ 2 ]

0 голосов
/ 03 февраля 2019

хорошо, javax.persistence.cache.retrieveMode работает только с уровнем кэша 2, поэтому его нельзя сравнивать с DTO, которые вообще не используют кэш

0 голосов
/ 02 февраля 2019

DTO как Википедия утверждает, что это:

... объект, который переносит данные между процессами

поэтому DTO не является сущностью и поэтому не управляется в любом случае (ну, не обязательно, вы могли бы использовать класс сущности в качестве DTO), но класс, который просто хранит данные.

Вы можете запроситьданные прямо в DTO, если вы хотите только получить данные - например, куда-то передать.Опять же, поскольку DTO не является объектом, он не кэшируется, поэтому данные поступают непосредственно из базы данных.Вы также не можете выполнять над ним никакие JPA-операции.

CacheRetrieveMode.BYPASS влияет на то, как EntityManager использует свой кэш при извлечении объектов - поэтому используются методы find(..).BYPASS сначала пропустит поиск из кэша и заставит загружать сущность всегда из базы данных.

Таким образом, эти две вещи не сравнимы напрямую, потому что это совершенно разные вещи.Но различие, которое вы после того, как я думаю, следующее:

  • CacheRetrieveMode.BYPASS заставляет EntityManager обходить кеш и загружать сущность из базы данных при использовании find()
  • DTO s при непосредственном создании экземпляров с помощью JPQL, NATIVE или некоторых CriteriaQuery не используют методы EntityManager, такие как find(..), но эти специализированные запросы, которые не приводят к сущностям, никогда не кэшируются независимо от того, что установлено с CacheRetrieveMode
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...