目前,我有一个表,其列的数据类型为enum。我的问题是我可以在这个列上执行IN查询吗?
例如:
enum Gender { MALE, FEMALE, GAY };
Table Student (
String name;
Gender gender;
)
我可以执行:
SELECT * FROM Student WHERE gender IN ('MALE', 'FEMALE');
请注意,我使用string作为in的参数,但我得到了:
Caused by: java.lang.IllegalArgumentException: Parameter value [('MALE')] did not match expected type [Gender]
这个问题有解决方法吗?
谢谢,
czetsuya
答案 0 :(得分: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);