Если я укажу, что результаты запроса должны быть кэшированы, например,
// This example shows the execution of a Hibernate query in a Grails app,
// but the question isn't really about Grails
Author author = new Author(name: 'Charles Dickens')
def results = Book.findByAuthor(author, [cache: true])
Обязательно ли для Автора реализовать equals()
и hashCode()
, чтобы кэширование было эффективным?
Если я не реализую эти методы, то получается, что если я выполню приведенный выше код дважды, второй объект автора будет иметь хеш-код, отличный от первого, и поэтому кэшированные результаты не будут возвращеныво второй раз выполняется запрос.
Обновление
Для тех, кто не знаком с GORM, приведенный выше запрос эквивалентен HQL
executeQuery("from Book b where b.author = ?", author)