GORM не может сделать запрос HQL - PullRequest
0 голосов
/ 21 октября 2011

У меня странная ошибка с Grails.Я хочу вернуть некоторые сохраненные данные, поэтому я выполняю запрос HQL для него.Мне нужно получить список из класса домена, который имеет отношение manyToOne.

Запрос довольно простой, посмотрите сами:

def listActuel = PositionnementProfil.find("FROM PositionnementProfil as pp where pp.positionnement.libelle='actuel'")

Но я получаю эту ошибку:

Ошибка 500: Выполнение действия [positionnement] контроллера [package.ProfilController] вызвало исключение: неверный запрос [FROM PositionnementProfil как pp, где pp.entreprise.libelle = 'Orange'] для класса домена [пакет класса.PositionnementProfil]

Так что сомневаюсь, я попытался с более простым запросом, просто чтобы убедиться, и поскольку я продолжал иметь этот тип ошибки, я решил попробовать с другим классом.Все еще получил это изумительное сообщение с этим фрагментом кода:

def test = Profil.find("FROM Profil as p where p.firstName like='Jean'")
//NOtice I executed more complex queries on this class with success, here not

Даже если я новичок в Grails, я не думаю, что я новичок (пожалуйста, Боже, скажи мне, что я все сделал правильно: D), Я снова последовал за Grails Doco (http://grails.org/doc/latest/guide/5.%20Object%20Relational%20Mapping%20%28GORM%29.html#5.4.3%20Hibernate%20Query%20Language%20%28HQL%29), Я очистил свой проект, выполнив «Очистить Grails», перезапустил мой компьютер, и все еще получил эту хорошую проблему. Я не знаю почему, но, похоже, проблемы только в этомчасть моего кода:

class ProfilController {

def scaffold = Profil


    def positionnement = {
        def test = Profil.find("from profil as p where p.firstName like 'Jean'")
    }

    //... I've put this code in other places, but I don't believe in "supernatural" places
}

Я действительно не понимаю, как с этим справиться. Другой признак: Netbeans не распознает автодополнение GORM.

1 Ответ

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

Мне кажется, я помню недавнюю проблему с чувствительностью к регистру find() и findAll(), но это не поможет, поскольку исправление будет в 2.0.Но простой обходной путь - использовать executeQuery() вместо этого, поскольку это всего лишь прямой хук в Hibernate HQL:

def listActuel = PositionnementProfil.executeQuery(
       "FROM PositionnementProfil as pp where pp.positionnement.libelle='actuel'")[0]

Единственное отличие, кроме имени метода, состоит в том, что, поскольку executeQuery() возвращает List, вынужно взять элемент 1 st с [0]

...