我改变了Spring Data Couchbase在this answer之后写入 _class 属性的方式 . 现在,如果我保存类 com.package.entity.User 的对象,我的文档看起来像:

{
    ...
    "_type": "user"
}

我的观点是,当我使用像 public Long countByAdminIsTrue() 这样的查询方法时,Spring生成的请求如下:

SELECT COUNT(*) FROM `myBucket` WHERE (`admin` = TRUE) AND `_type` = "com.package.entity.User"

而不是我期望的结果:

SELECT COUNT(*) FROM `myBucket` WHERE (`admin` = TRUE) AND `_type` = "user"

这是我的 CouchbaseTypeMapper doint这项工作:

public class CustomCouchbaseTypeMapper extends DefaultTypeMapper<CouchbaseDocument> implements CouchbaseTypeMapper {
    public CustomCouchbaseTypeMapper() {
        super(new CustomCouchbaseDocumentTypeAliasAccessor());
    }

    @Override
    public String getTypeKey() {
        return "_type";
    }

    public static final class CustomCouchbaseDocumentTypeAliasAccessor implements TypeAliasAccessor<CouchbaseDocument> {
        @Override
        public Object readAliasFrom(CouchbaseDocument source) {
            return source.get("_type");
        }

        @Override
        public void writeTypeTo(CouchbaseDocument sink, Object alias) {
            String typeName = StringUtils.typeNameFromFullClassName((String) alias);
            sink.put("_type", typeName);
        }
    }
}

我已经尝试使用我的实体在构造函数中定义 ConfigurableTypeInformationMapper ,但它没有帮助 . 在基于查询方法生成查询时,如何使Spring Data使用我的自定义类型名称和值?