Spring Data Elasticsearch使用BigDecimal作为ID

问题描述 投票:1回答:1

出于某种原因,我想使用BigDecimal类型的值作为ID。但是运行时,出现错误“不支持的ID类型类java.math.BigDecimal”。

我在ElasticsearchRepositoryFactory.java中找到了以下代码。

protected Class<?> getRepositoryBaseClass(RepositoryMetadata metadata) {
    if (isQueryDslRepository(metadata.getRepositoryInterface())) {
        throw new IllegalArgumentException("QueryDsl Support has not been implemented yet.");
    }
    if (Integer.class.isAssignableFrom(metadata.getIdType()) || Long.class.isAssignableFrom(metadata.getIdType())
            || Double.class.isAssignableFrom(metadata.getIdType())) {
        return NumberKeyedRepository.class;
    } else if (metadata.getIdType() == String.class) {
        return SimpleElasticsearchRepository.class;
    } else if (metadata.getIdType() == UUID.class) {
        return UUIDElasticsearchRepository.class;
    } else {
        throw new IllegalArgumentException("Unsupported ID type " + metadata.getIdType());
    }
}

根据代码,我只能将Integer,Long或Double用作数字键。但是如果我将id类型更改为Long或String,我会遇到问题。

是否可以使用BigDecimal作为ID?

spring-data-elasticsearch
1个回答
0
投票

尝试使用BigDecimalBridge

@SortableField
@FieldBridge(impl = BigDecimalBridge.class)
@Field(normalizer = @Normalizer(definition = "lowerCaseNormalizer"), store = Store.YES)
@Column
private BigDecimal quantity;
© www.soinside.com 2019 - 2024. All rights reserved.