0

目前,我有一个表,其中有一列具有数据类型枚举。我的问题是我可以在该列上执行 IN 查询吗?

例如:

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

我可以执行:

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

请注意,我使用字符串作为 in 的参数,但我得到:

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

这个问题有解决方法吗?

谢谢,
czetsuya

4

1 回答 1

3

由于无法识别字符串值,因此请执行以下代码(假设您已将 Enum 与默认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);
于 2012-08-22T06:24:15.143 回答