2011-05-02 48 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