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