使用Spring Data Couchbase更改属性`_class`的名称和值

时间:2017-05-10 13:08:45

标签: spring-data couchbase spring-data-couchbase

我更改了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这项工作:

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使用我的自定义类型名称和值?

0 个答案:

没有答案