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