Я видел, как работа с БД выполнялась всеми способами: от жесткого кодирования SQL непосредственно для каждого метода, обращающегося к базе данных, до sql, хранимого в статических строках в центральных файлах, до его сохранения в файлах свойств и, наконец, ORM, таких как в спящем режиме. Я даже видел SQL, хранящийся в БД!
Я бы никогда не рекомендовал хранить SQL (или ORM-запросы) вдали от кода, который нуждается в них. Простая причина в том, что, по моему опыту, разрывая соединение, разработчики начинают повторно использовать и неправильно использовать запросы. Со временем разработчики теряют понимание того, где и где используются запросы, и начинают добавлять новые, чтобы избежать риска их взлома. В конце концов они заканчивают файлами, полными запросов, не зная, какие из них даже используются. Худшее, что я когда-либо видел, - это когда разработчики централизовали SQL и разбили его на отдельные части. Было почти невозможно сказать, сломает ли изменение что-то.
Первоначальным аргументом для разделения запросов обычно является "обслуживание" или "в случае, если мы изменим БД" и т. Д. Но в конце дня это становится более серьезной проблемой, чем предполагалось исправить.
Подводя итог, я бы рекомендовал хранить запросы как можно ближе к коду, который их использует. Гибернация и тому подобное способствуют тому, чтобы сделать это прагматичным решением.