Grails/ GORM: разница между lazy: false и fetchMode

В Grails / GORM, в чем разница между static mapping = {xyz lazy: false} & static fetchMode = [xyz: 'eager']?

пример:

class Book {
    static belongsTo = [author: Author]
    static mapping   = {author  lazy: false}
    static fetchMode = [author: 'eager']
}

1 ответов


разницу между lazy: false и fetchMode 'жаждущих' are

  1. lazy: false получит Связанный объект домена, снова запросив базу данных с помощью Select Query, но fetchMode 'eager', который теперь устарел(используйте fetch:'join'), попытается присоединиться к связанным таблицам(используя внешнее соединение) и получить связанные объекты в одном запросе.
  2. lazy: false будет иметь еще один запрос к базе данных для извлечения связанного домена объект и, следовательно, будет иметь больше взаимодействий с базой данных, тогда как fetch:'join' будет иметь меньше взаимодействия для получения тех же данных.
  3. Fetchmode Join переопределяет свойство lazy. Он будет просто игнорировать ленивых: false.

Если вас интересует подробное объяснение о Fetchmodes, посмотрите http://www.solidsyntax.be/2013/10/17/fetching-collections-hibernate/. В статье описаны Hibernate fetchmodes и выходные данные которые они производят.

надеюсь, что это помогает.