2012-08-22 158 views
0

目前,我有一個列有一個數據類型枚舉的表。我的問題是我可以在這個列上執行IN查詢嗎?休眠在枚舉數據類型列上執行IN查詢

例如:

enum Gender { MALE, FEMALE, GAY }; 
Table Student (
    String name; 
    Gender gender; 
) 

我可以執行:

SELECT * FROM Student WHERE gender IN ('MALE', 'FEMALE'); 

請注意,我用字符串作爲的參數,但我發現:

Caused by: java.lang.IllegalArgumentException: Parameter value [('MALE')] did not match expected type [Gender] 

是有關於這個問題的解決方法?

感謝,
czetsuya

+10

既然是男同性戀? –

+0

對不起例子:-) – czetsuya

回答

4

由於字符串值不被識別,請執行以下代碼(假設你已經使用枚舉默認EnumType):

SELECT * FROM Student WHERE gender IN (0,1); 

如果使用EnumType.String

Query query = session.createQuery(
    "SELECT s FROM Student s WHERE s.gender=:g1 or s.gender=:g2"); 
query.setParameter("g1", Gender.MALE); 
query.setParameter("g2", Gender.FEMALE); 
+0

不幸的是我使用EnumType.String,所以我只能與String進行比較。 – czetsuya

+0

其實,我早就想過了,但我的參數是動態字符串。但我會嘗試解析字符串並將其轉換爲適當的枚舉值。謝謝。 – czetsuya