2016-02-01 2 views
0

Учитывая У меня есть этот домен:Grails - CreateCriteria для извлечения какой-либо элемент, который содержит какой-либо элемент в запросе

class Game { 
    Set<GameType> gameType 
    String name 
} 

И это перечисление:

enum Gametype { 
    RHYTHM, ADVENTURE, PUZZLE, RPG, HORROR, FIGHTING, MOBA, MMO 
} 

Мне нужно получить список игр, который содержит не менее одного типов игр, указанных в запросе. Я попытался использовать этот код:

def retrieveGamesThatMayBeUnderGameTypes(List<GameType> listOfGameTypes) { 
    return Game.createCriteria().list(){ 
     'in'("gameType", listOfGameTypes) 
    } 
} 

Однако он возвращает исключение NullPointerException. Есть идеи?

ответ

0

Просто убедитесь, что ваш перечислитель (Gametype) имеет поле под названием id. Что-то вроде:

enum Gametype { 
    RHYTHM('RHYTHM'), 
    ADVENTURE('ADVENTURE'), 
    .... 

    String id 

    Gametype(String id) { 
     this.id = id 
    } 
} 

Смотрите этот ответ на более: Grails Enum Mapping

+0

Есть ли у нее быть поле, называемое 'id'? Может ли это быть другим типом данных? Это может быть другой домен или перечисление? –

+0

Его нужно называть 'id' - это правило, иначе hibernate не знал бы, как передать значение компонента bean. Столбец 'id' может быть любого типа, но не только' String'. – defectus

+0

Я вижу. Однако в настоящее время в базе данных нет таблицы для перечисления. Будет ли добавление id заставлять enum иметь свою собственную таблицу? –