如何在grails中使用executeQuery()进行多态查询?

时间:2011-05-02 18:01:30

标签: hibernate grails groovy gorm

为什么这个多态查询不起作用?

    String hql = """
                   FROM User u
                   WHERE
                   u.type.class = :typeClass
                """

    return User.executeQuery(hql, [typeClass:Super])

我得到的是以下异常:

Stacktrace follows:
java.lang.ClassCastException: java.lang.Class cannot be cast to java.lang.Integer
....

更新 当我尝试将类添加为命名参数时,似乎只会发生错误。例如,我没有使用此代码出错:

    String hql = """
                   FROM User u
                   WHERE
                   u.type.class = Super
                """

    return User.executeQuery(hql)

UPDATE2

这个问题困扰着我。现在我不在乎再使用它了。这就是我最终做的事情:

    def typeClass = Super.class.name

    String hql = """
                   FROM User u
                   WHERE
                   u.type.class = $typeClass
                """

    return UserMedia.executeQuery(hql)

真的很奇怪,无论我在尝试通过classclass.name时做了什么我都会得到错误。有和没有多行groovy字符串。

1 个答案:

答案 0 :(得分:2)

尝试:

[typeClass: Super.class.name]

编辑:这是一些适用于我的代码的简化版本。

class Food {
    // ...
}

class CatFood extends Food {
    // ...
}

class DogFood extends Food {
    // ...
}

class Animal {
    static belongsTo = [food: Food] // This example is a little contrived...
}

class AnimalService {
    def usedCatFoods() {
        Animal.executeQuery("select a.food from Animal a where a.food.class = :foodClass", [foodClass: CatFood.class.name])
    }
}