Вызов setCacheable () предназначен для включения кэша запросов , см. javadoc :
Enable caching of this query result, provided query caching is enabled for the underlying session
В результате происходит кэширование идентификаторов компаний, но не самих объектов.Если вы включите кеш второго уровня, то эти отдельные запросы компании будут обрабатываться кешем второго уровня.
Чтобы включить кеш второго уровня, вам нужно установить hibernate.cache.use_second_level_cache = true в persistence.xml,Кроме того, вам нужно аннотировать ваши отношения и сущности, которые вы хотите кэшировать, в кэше второго уровня.
@OneToMany
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_ONLY)
private List<Company> companies;
И кэширование сущностей:
@Entity
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_ONLY)
public class Company {
...
}
Кстати, кэш второго уровня будет толькокэшируйте отношения и сущности, которые вы найдете по id.Запросы не могут быть кэшированы кешем второго уровня и всегда будут отправляться в базу данных (или кеш запросов).