能否在Ignite SQL查询的WHERE子句中使用字符串字面量查询枚举字段?
在Ignite 2.13.0中使用SQL字符串字面量查询枚举字段的方法
问题原因
你遇到的报错是因为Ignite默认将枚举类型视为二进制对象处理,直接在SQL中使用'M'这类字符串字面量时,会被解析器误判为十六进制数据,从而抛出"Hexadecimal string with odd number of characters"的错误。
可行解决方案:使用ENUM()函数显式转换
Ignite SQL支持通过ENUM()函数将字符串字面量转换为对应的枚举类型,你可以直接在SQL语句中这样写:
SqlFieldsQuery qry = new SqlFieldsQuery("select * from Person where sex=ENUM('query.SQLQueryTest$Sex', 'M')");
其中:
- 第一个参数是枚举类的全限定类名(注意内部类需要用
$连接外部类和内部类,比如你的Sex是SQLQueryTest的内部类,所以类名是query.SQLQueryTest$Sex) - 第二个参数是枚举值的名称字符串(即
M或F)
验证效果
修改后的SQL语句可以正确匹配枚举字段,执行后会返回2条符合条件的数据,与预期一致。
额外说明
如果觉得每次写全限定类名麻烦,也可以通过以下方式优化:
- 将枚举类改为顶级类(而非内部类),这样类名更简洁,比如
query.Sex - 不推荐:在创建
QueryEntity时将枚举字段的sqlType设为字符串类型,这种方式会丢失枚举的类型约束,仅适用于无严格类型校验的场景
内容的提问来源于stack exchange,提问作者Alex Shananin
相关产品推荐
相关产品推荐

