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