DTO как Википедия утверждает, что это:
... объект, который переносит данные между процессами
поэтому DTO не является сущностью и поэтому не управляется в любом случае (ну, не обязательно, вы могли бы использовать класс сущности в качестве DTO), но класс, который просто хранит данные.
Вы можете запроситьданные прямо в DTO, если вы хотите только получить данные - например, куда-то передать.Опять же, поскольку DTO не является объектом, он не кэшируется, поэтому данные поступают непосредственно из базы данных.Вы также не можете выполнять над ним никакие JPA-операции.
CacheRetrieveMode.BYPASS влияет на то, как EntityManager использует свой кэш при извлечении объектов - поэтому используются методы find(..)
.BYPASS сначала пропустит поиск из кэша и заставит загружать сущность всегда из базы данных.
Таким образом, эти две вещи не сравнимы напрямую, потому что это совершенно разные вещи.Но различие, которое вы после того, как я думаю, следующее:
- CacheRetrieveMode.BYPASS заставляет EntityManager обходить кеш и загружать сущность из базы данных при использовании
find()
- DTO s при непосредственном создании экземпляров с помощью JPQL, NATIVE или некоторых CriteriaQuery не используют методы EntityManager, такие как
find(..)
, но эти специализированные запросы, которые не приводят к сущностям, никогда не кэшируются независимо от того, что установлено с CacheRetrieveMode