Лично, после нескольких лет гибернации (которую я люблю больше, чем ненависти), я вижу две основные причины, по которым вы хотите делать только спальные запросы . Потенциально перемещение в другую базу данных, кэширование запросов будет другим.И то и другое, для меня, очень веские причины, если это важно для вас.Вы, вероятно, получите здесь больше ответов, почему это хорошо, поэтому я не буду рассказывать вам больше об этом.Вместо этого я мог бы сказать вам, почему это не всегда возможно в случаях, с которыми я действительно сталкивался.
Пространственные запросы - типы данных геометрии и географии;Есть много баз данных, которые поддерживают это, и иногда это очень удобная функция - мне очень нравится MSSQL в этом отношении, их стратегия индексирования, как это обрабатывается и т. д. Нет никакого способа сделать эти запросы в спящем режиме, который имеет очень ограниченные возможности для этого.
Hibernate иногда скрывает намного больше, чем должен (это не его вина);если вы не понимаете, какие запросы будут генерировать в спящем режиме, вы часто будете очень удивлены.Я предлагаю вам постоянно проверять актуальные запросы.Другой пример - когда вы работаете с пессимистичными / оптимистичными блокировками - всегда просматривайте запросы, это не всегда тот случай, когда hibernate может генерировать то, что вы ожидаете ... (AzureSQL не имеет select for update
- этоиспользует hints
, например with row lock
и т. д., что дает нулевую уверенность в том, что строка будет заблокирована, без надлежащего индекса и нескольких ресурсов, которые могут быть заблокированы для всей таблицы или страницы)
При этом явсегда старайтесь отдать предпочтение Hibernate в этом отношении, если что-то не работает так, как я ожидаю, - я использую нативные запросы, и такого ИМХО этого идеально сформированного мира просто не существует.