Вы можете поместить это в сопоставления классов вашего домена:
static mapping = {
cache 'read-only'
}
Но я не уверен, поможет ли это Hibernate понять, что это вид ... http://docs.jboss.org/hibernate/stable/core/reference/en/html_single/#performance-cache-readonly
В любом случае, мы часто используем представления базы данных в качестве классов домена grails в нашем текущем проекте, потому что HQL - трудная задача, и для объединения таблиц проще использовать SQL.
Одна вещь, с которой вам следует быть осторожным, это пакетная обработка запросов Hibernate (и весь процесс очистки). Если вы вставляете что-то в таблицу, а затем в той же транзакции выбираете представление, зависящее от этой таблицы, вы не получите последние вставленные строки. Это связано с тем, что Hibernate на самом деле еще не вставил строки, тогда как если бы вы выбрали таблицу, в которую вы вставили строки, Hibernate выяснил бы, что нужно сбросить ожидающие запросы, прежде чем дать вам результат вашего выбора.
Одним из решений является (flush:true
) при сохранении экземпляра домена, который, как вы знаете, должен будет впоследствии просмотреть представление в той же транзакции.
Было бы здорово, однако, иметь какой-то способ сказать Hibernate, что представление / домен зависит от того, какие другие классы домена, так что сброс Hibernate работает хорошо без всяких проблем.