【发布时间】:2014-08-03 07:54:32
【问题描述】:
Data-REST 和 dynamoDB 并尝试按如下方式对我的 GSI 对象进行排序,是否可以在 dynamoDB 中对 GSI Hashkey 进行排序, 域类
@DynamoDBTable(tableName = "test")
public class Test implements Serializable{
private static final long serialVersionUID = 1L;
private String id;
private String name;
private String desc;
@DynamoDBHashKey(attributeName="id")
@DynamoDBAutoGeneratedKey
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
@DynamoDBIndexHashKey(attributeName="name")
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@DynamoDBAttribute(attributeName="desc")
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
}
public interface TestRepository extends PagingAndSortingRepository{
@EnableScan
@EnableScanCount
public Page<Test> findByName(@Param("name") String name, Pageable pageable);
public Page<Test> findByNameOrderByNameAsc(@Param("name") String name, Pageable pageable);
}
是否可以在二级索引上使用 orderBy,因为我使用的是自动生成的 hashkey,因此无法将 hashkey 属性与 Range 键结合起来以获取所有可能的结果。我需要获取满足搜索和 orderBy 名称(GSI)的名称。或者 DynamoDB 只支持 orderBy 通过 hashkey 和 range key 就像在 Demo 中一样?
当我这样做时,出现“无法在扫描查询中使用 orderBy”的异常。
更新: 我正在使用 Spring Data DynamoDB,我在 DynamoDB 中创建了一个名为“description-name-index”的 GSI 哈希和键索引,我喜欢通过哈希键的 findBy 使用范围键对其数据进行排序。这是我的测试代码, 域类
@DynamoDBTable(tableName = "test")
public class Test implements Serializable{
private static final long serialVersionUID = 1L;
private String id;
private String description;
private String name;
@DynamoDBIndexHashKey(attributeName="description")
public String getDescription() {
return tesId;
}
public void setDescription(String description) {
this.setDescription(description);;
}
@DynamoDBIndexRangeKey(attributeName="name")
public String getName() {
return name;
}
public void setName(String name) {
this.setName(name);
}
@DynamoDBHashKey(attributeName="id")
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
}
并尝试使用findByDescriptionOrderByNameDesc(@Param("decription") String description, Pageable pageable) 获取和排序数据,我也尝试使用@Id 并将索引哈希和范围键放在一个类中,但都是徒劳的。我收到500 Internal Error,但也没有发送任何消息。有什么方法可以使用 GSI 哈希和范围对并对它们进行排序。
【问题讨论】:
标签: spring amazon-web-services spring-data amazon-dynamodb spring-data-rest