2012-08-22 85 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