You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Aerospike整合Spring时主键PK类型为何始终变为varchar类型

问题成因
  • Spring Data Aerospike 默认的主键序列化逻辑不会识别@Id字段声明的Java类型,默认会把所有主键统一转成字符串格式写入Aerospike,不会存为原生整数类型。
  • aql查询结果里PK值带双引号就是字符串类型的典型表现,Aerospike中整数类型主键返回时不会包裹双引号。
  • 额外排查点:实体类@Document注解标注的collection是user_repo,但aql查询的是test集合,如果不是手动切换了查询目标,要确认是不是有其他写入逻辑往test集合写数据,避免测试对象搞错。
解决方案
  • 自定义主键转换器覆盖默认逻辑
    实现Aerospike的读写转换器,指定整数类型主键直接序列化为Aerospike原生整数Key,参考代码如下:
    // 主键写入转换器:Java Integer -> Aerospike 整数类型Key
    @WritingConverter
    public class IntegerKeyWriteConverter implements Converter<Integer, Key> {
        @Override
        public Key convert(Integer source) {
            return new Key(Key.KeyType.INTEGER, source);
        }
    }
    
    // 主键读取转换器:Aerospike Key -> Java Integer
    @ReadingConverter
    public class IntegerKeyReadConverter implements Converter<Key, Integer> {
        @Override
        public Integer convert(Key source) {
            return source.getValue().intValue();
        }
    }
    
    将两个转换器注册到Spring Data Aerospike的MappingAerospikeConverter配置中,替换默认的字符串转换逻辑即可。
  • 适配默认逻辑
    如果对主键底层存储类型没有强制要求,可以直接把实体类@Id字段类型改为String,Repository接口的主键泛型也同步改为String,和框架默认序列化逻辑对齐,不会影响正常CRUD使用,仅底层存储为字符串类型。
  • 校验方式:配置完成后重新插入测试数据,用aql查询时PK列显示为不带双引号的纯数字,即代表主键已按整数类型正常存储。

内容的提问来源于stack exchange,提问作者Riccio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 10:09:20