Я начал копаться в том, как все это работает, а затем обнаружил, что метод 1 действительно отключен в текущих версиях грааля (протестировано в 1.2.1 и 1.3). Когда вы на самом деле пытаетесь найти автора и посмотреть на его книги, выдается исключение
Для него существует открытый дефект ( 4089 ), который уже давно открыт.
Вот исключение, которое выдается:
ERROR util.JDBCExceptionReporter - Column not found: BOOKS0_.TITLE in statement [select books0_.author_books_id as author1_0_, books0_.book_id as book2_0_ from author_book books0_ where books0_.author_books_id=? order by books0_.title]
Если и когда они наконец исправят это, различия между этими двумя методами заключаются в том, что в первом методе сортировка выполняется на уровне базы данных. Как вы можете видеть в исключении выше, GORM пытался выполнить «заказ по books0_.title», который использовал бы любой индекс базы данных в поле book.title и возвращал объекты в этом порядке.
Второй метод сортирует объекты в памяти в тот момент, когда они вставляются в набор (используя определенный метод CompareTo).
Пока текущая ошибка не будет исправлена, я бы использовал метод 2, потому что это единственное, что работает. Это должно быть хорошо для относительно небольших коллекций вещей. После исправления я бы предпочел метод 1, поскольку база данных должна быстрее выполнять сортировку с индексом в поле сортировки.