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

标签 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)

更新2

这个问题使我感到困惑。现在我不在乎用更多的时间了。这就是我最终要做的事情:
    def typeClass = Super.class.name

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

    return UserMedia.executeQuery(hql)

真的很奇怪,无论我尝试传递class还是class.name时做了什么,我总是会收到错误消息。有和没有多行groovy字符串。

最佳答案

尝试:

[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])
    }
}

关于hibernate - 如何在grails中使用executeQuery()进行多态查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5860642/

相关文章:

git - 自定义Gradle任务失败-找不到GitPush

sql - Hibernate 空字符串用于 PostgreSQL 8.3 和 Oracle 11g 的相等限制

java - 如何动态替换 Eclipse 插件的类加载器?

java - @Transactional注解是否避免并发访问业务层方法

java - 如何在 Hibernate ManyToMany Mapping 中更新链接表

grails - Intellij 中的 Groovy 源文件编译

jquery - Grails + Jquery,纯 HTML 不起作用

spring - Grails 3 - 使用 JSON View 时放心给出 SnippetException 的 Spring Rest 文档

grails - 具有默认参数的Groovy列表方法不匹配

grails - Grails GORM:常规 map