Кэш L1 и L2 не может вам сильно помочь с проблемой «получить всю таблицу».
Кэш L1 плохо оборудован, потому что если кто-то вставил что-то еще, его там нет.(Вы можете «знать», что никто другой никогда не будет делать это в рамках бизнес-правил системы, но Hibernate Session этого не делает.) Поэтому вам нужно заглянуть в БД, чтобы быть уверенным.
С кешем L2, вещи могут быть устаревшими или сброшенными с тех пор, как кто-нибудь в последний раз помещал туда таблицу.Это может зависеть от провайдера кэша или даже полностью внешне, возможно, через MBean.Таким образом, Hibernate не может действительно знать в любой момент времени, представляет ли то, что находится в кеше для этого типа, все содержимое таблицы.Опять же, вы должны заглянуть в БД, чтобы быть уверенным.
Поскольку у вас есть особые знания об этой сущности (новые никогда не создаются), что нет практического способа передачи на кеш L1 или L2вам нужно либо использовать инструмент, предоставляемый Hibernate, когда у вас есть специальные знания уровня бизнес-правил о наборе результатов, кешировать запросы, либо кешировать информацию самостоятельно.
-
Если вы действительно хотите, чтобы это было в кеше L2, вы теоретически могли бы сделать все объекты в таблице членами коллекции в какой-то другой поддельной сущности, затем включить кэширование коллекции и тайно управлять ею в DAO.Я не думаю, что, возможно, стоило бы иметь такую причудливость в вашем коде, хотя:)