2011-05-02 54 views
0

为什么这个多态查询不起作用?如何在grails中用executeQuery()做多态查询?

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字符串。

回答

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]) 
    } 
} 
+0

同样的错误。认为它与命名的属性函数有关。 – netbrain 2011-05-02 21:03:16

+0

我添加了一个代码示例,为了理智,检查我们是否以相同的方式构造类。 – Dana 2011-05-02 21:51:34

+0

我很快就检查了这一点。奇怪它不适合我。但是,您的解决方案仍然可以使用多行GString吗? (例如“”“gstring”“”) – netbrain 2011-05-04 08:21:40