Spring Data Elasticsearch使用BigDecimal作为ID

时间:2018-08-21 04:59:43

标签: spring-data-elasticsearch

出于某种原因,我想使用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?

1 个答案:

答案 0 :(得分:0)

尝试使用 BigDecimalBridge

@SortableField
@FieldBridge(impl = BigDecimalBridge.class)
@Field(normalizer = @Normalizer(definition = "lowerCaseNormalizer"), store = Store.YES)
@Column
private BigDecimal quantity;