Вы можете использовать метод развертывания, чтобы получить реализацию поставщика, если вы хотите использовать специфичные для поставщика расширения. например.,
org.hibernate.Query hquery = query.unwrap(org.hibernate.Query.class);
Затем вы можете работать с конкретным интерфейсом поставщика. Кроме того, вы можете просто развернуть ваш EntityManager
до Session
, прежде чем создавать запрос.
Если вы не хотите импортировать код из спящего режима, вы также можете сделать
query.setHint("org.hibernate.cacheable", Boolean.TRUE);
На самом деле вам решать, каким образом вы бы предпочли ввести зависимость от поставщика.
Я бы предпочел первый, так как он потерпит неудачу с исключением, если hibernate будет удален из ваших зависимостей, посылая большой красный "Эй, разработчик, вы меняете это, здесь была зависимость от поставщика". Принимая во внимание, что подсказка просто ничего не делает, если это не понято поставщиком.
Другие люди предпочли бы иметь в коде магические строки, зависящие от поставщика, а не зависеть от поставщика во время компиляции.