Они одинаковы, но это не очевидно, почему. Во втором примере, даже если вы не объявляете свойство Author
, оно существует, потому что Grails использует преобразование AST, чтобы добавить свойство для вас. Свойство belongsTo
- это карта; ключ (author
) используется как имя переменной, а значение используется как тип. Таким образом, свойство Author author
в первом примере избыточно, потому что оно было бы добавлено для вас во время компиляции.
Не помешает включить его и может помочь в IDE, которая не очень осведомлена о Grails с автозаполнением.
Точно так же, Grails добавляет Long id
и Long version
свойства (опуская версию, если у вас есть version false
в mapping
блоке), так что вы можете добавить их в свой код, но они также могут быть излишними. Конечно, если вам нужно изменить тип идентификатора, вы должны быть явным.
Если у вас есть hasMany
property in Author
class, eg.
static hasMany = [books: Book]
Grails также добавит имущество, основанное на этой декларации. Опять же, свойство - это карта, а значение указывает тип элементов коллекции, а ключ указывает имя свойства. Таким образом, вы фактически получаете
Set<Book> books
Недвижимость. Вы можете добавить это в свой код (обычно без общего типа, Set books
), но это не нужно, поскольку большинство IDE знают, что добавляет Grails.
Вы бы добавить, что недвижимость в код, если вы хотите изменить от типа по умолчанию Set
к List
:
List books
, но только если это имеет смысл заказывать их в базе данных.
Обратите внимание, что эти имена переменных являются только условными обозначениями. Вы можете назвать Author
и свойства книг, которые вам нравятся, например.
static belongsTo = [writer: Author]
, который бы добавить Author writer
собственность и
static hasMany = [tomes: Book]
, который бы добавить Set tomes
собственность.