Что лучший способ состоит в том, чтобы объявить отсортированную ассоциацию в классах домена чаш Грааля?

Кажется, что существует два различных способа объявить отсортированные ассоциации в Grails:

Метод 1 (см. здесь), использующий порядок сортировки по умолчанию

class Book {
  String title 
}
class Author {
  static hasMany = [books : Book]
  static mapping = { books sort: "title"}
}

Метод 2 (см. здесь), использование SortedSet

class Book implements Comparable {
  String title
  int compareTo(obj) {
    title <=> obj.title
  }
}
class Author {
  SortedSet books
  static hasMany = [books : Book]
}

Я не уверен, какой использовать и каково различие (если таковые имеются), за и против между использованием того против другого.

Я ценил бы любое разъяснение.

Спасибо

8
задан fabien7474 15 May 2010 в 13:57
поделиться

1 ответ

Я начал копаться в том, как все это работает, а затем обнаружил, что метод 1 фактически не работает в текущих версиях grails (проверенных как в 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, поскольку база данных должна быстрее выполнять сортировку с индексом в поле сортировки.

6
ответ дан 5 December 2019 в 22:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: