Как иметь общий базовый тип для классов домена в GORM GRAILS? - PullRequest
0 голосов
/ 29 октября 2011

Если у меня есть что-то вроде ...

class Tiger{
    int id
    String name
}

class Giraffe{
    int id
    String name
}

Как это сделать, чтобы они выходили из общего класса, например Животное, но мне не нужен стол с животными, только столы с жирафом и тигром Поэтому я хотел бы иметь возможность запросов, таких как Animal.findNameBy ('Bob') Это возможно в GORM?

Ответы [ 3 ]

1 голос
/ 31 октября 2011

Да, это легко возможно. Просто сделайте это, как вы описали: добавьте классного животного в папку вашего домена и позвольте жирафу и тигру образоваться от этого класса. Все сразу будет работать так, как нужно, так что вы можете запросить всех своих животных из класса Anmial. Посмотрите на: http://grails.org/doc/latest/guide/5.%20Object%20Relational%20Mapping%20%28GORM%29.html#5.2.3%20Inheritance%20in%20GORM

Пожалуйста, удалите определение int id, поскольку GORM будет обрабатывать ваши идентификаторы.

Вы можете иметь одну таблицу для иерархии или подкласса. Посмотрите на: http://grails.org/doc/latest/guide/5.%20Object%20Relational%20Mapping%20%28GORM%29.html#5.5.2.3%20Inheritance%20Strategies

1 голос
/ 03 ноября 2011

При этом будут созданы таблица Tiger и таблица Giraffe, в которых оба (в дополнение к столбцу идентификатора GORM и столбцу версии по умолчанию) имеют столбец с именем Name.В то время как у Жирафа также будут столбцы с метками пятен, а у Тигра будут столбцы с метками полос.

class Animal{
  String name
  static mapping = {
    tablePerHierarchy false
   }
}

class Tiger{
  String stripes
}

class Giraffe{
  String spots
}
1 голос
/ 29 октября 2011

Вы можете создать класс Animal в grails-app/src/java или grails-app/src/groovy, а затем ваши домены смогут расширить этот класс и его членов для использования в ваших Giraffe и Tiger доменах.не думаю, что вы можете использовать запросы GORM для класса Animal.Попробуйте и узнайте.

...