出于某种原因,我想使用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?
答案 0 :(得分:0)
尝试使用 BigDecimalBridge
@SortableField
@FieldBridge(impl = BigDecimalBridge.class)
@Field(normalizer = @Normalizer(definition = "lowerCaseNormalizer"), store = Store.YES)
@Column
private BigDecimal quantity;