Java @DynamoDBIndexHashKey必须指定哈希GSI名称之一

Java @DynamoDBIndexHashKey必须指定哈希GSI名称之一,java,amazon-dynamodb,Java,Amazon Dynamodb,我的课程如下 @DynamoDBTable(tableName = LogConstant.TableName) public class Journal { @DynamoDBIndexHashKey(attributeName = "event_type") private String eventType; @DynamoDBIndexHashKey(attributeName = "user_id",globalSecondaryIndexName = LogConstant.Glo

我的课程如下

@DynamoDBTable(tableName = LogConstant.TableName)
public class Journal {

@DynamoDBIndexHashKey(attributeName = "event_type")
private String eventType;

@DynamoDBIndexHashKey(attributeName = "user_id",globalSecondaryIndexName = LogConstant.GlobalUserIdIndex)
private String userId;

@DynamoDBIndexHashKey(attributeName = "user_identifier", globalSecondaryIndexName = LogConstant.GlobalUserIdentifierIndex)
private String userIdentifier;

@DynamoDBIndexHashKey(attributeName = "order_id", globalSecondaryIndexName = LogConstant.GlobalOrderIdIndex)
private String orderId;

@DynamoDBTypeConvertedEnum
@DynamoDBAttribute(attributeName = "generated_by")
private GenertionType generatedBy;

@DynamoDBTypeConvertedEnum
@DynamoDBHashKey(attributeName = "interacting_service")
private InteractingService interactingSerice;

@DynamoDBAttribute(attributeName = "agent")
private String agent;

@DynamoDBAttribute(attributeName = "content")
private String content;

@DynamoDBRangeKey
@DynamoDBIndexRangeKey(attributeName = "created_at",
        globalSecondaryIndexNames = {LogConstant.GlobalUserIdIndex,LogConstant.GlobalUserIdentifierIndex,LogConstant.GlobalOrderIdIndex})
private String createdAt;
获取搜索结果的服务是

DynamoDBQueryExpression<Journal> expression = new 
DynamoDBQueryExpression<Journal>()
            .withIndexName(LogConstant.GlobalUserIdIndex)
            .withConsistentRead(false)
            .withHashKeyValues(journal);

    TableDescription table = DynamoDbStarter.getDynamoDB().getTable(LogConstant.TableName).describe();

    return DynamoDbStarter.getDynamoDBMapper().query(Journal.class, expression);
DynamoDBQueryExpression表达式=新建
DynamoDBQueryExpression()
.withIndexName(LogConstant.GlobalUserIndex)
.withConsistentRead(假)
.withHashKeyValues(日记账);
TableDescription table=DynamoDbStarter.getDynamoDB().getTable(LogConstant.TableName.description();
返回DynamoDbStarter.getDynamoDBMapper().query(Journal.class,expression);
尽管insert工作正常,但在获取结果的过程中,我得到了一个异常

com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMappingException: @DynamoDBIndexHashKey must specify one of HASH GSI name/names
at com.amazonaws.services.dynamodbv2.datamodeling.StandardAnnotationMaps$FieldMap.globalSecondaryIndexNames(StandardAnnotationMaps.java:345) ~[aws-java-sdk-dynamodb-1.11.172.jar:na]
at com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapperFieldModel$Properties$Immutable.<init>(DynamoDBMapperFieldModel.java:459) ~[aws-java-sdk-dynamodb-1.11.172.jar:na]
at com.amazonaws.services.dynamodbv2.datamodeling.StandardBeanProperties$Bean.<init>(StandardBeanProperties.java:92) ~[aws-java-sdk-dynamodb-1.11.172.jar:na]
at com.amazonaws.services.dynamodbv2.datamodeling.StandardBeanProperties$Bean.<init>(StandardBeanProperties.java:86) ~[aws-java-sdk-dynamodb-1.11.172.jar:na]
at com.amazonaws.services.dynamodbv2.datamodeling.StandardBeanProperties$BeanMap.putOrFlatten(StandardBeanProperties.java:217) ~[aws-java-sdk-dynamodb-1.11.172.jar:na]
at com.amazonaws.services.dynamodbv2.datamodeling.StandardBeanProperties$BeanMap.putAll(StandardBeanProperties.java:207) ~[aws-java-sdk-dynamodb-1.11.172.jar:na]
at com.amazonaws.services.dynamodbv2.datamodeling.StandardBeanProperties$BeanMap.<init>(StandardBeanProperties.java:198) ~[aws-java-sdk-dynamodb-1.11.172.jar:na]
at com.amazonaws.services.dynamodbv2.datamodeling.StandardBeanProperties$CachedBeans.getBeans(StandardBeanProperties.java:55) ~[aws-java-sdk-dynamodb-1.11.172.jar:na]
at com.amazonaws.services.dynamodbv2.datamodeling.StandardBeanProperties$CachedBeans.access$100(StandardBeanProperties.java:48) ~[aws-java-sdk-dynamodb-1.11.172.jar:na]
at com.amazonaws.services.dynamodbv2.datamodeling.StandardBeanProperties.of(StandardBeanProperties.java:42) ~[aws-java-sdk-dynamodb-1.11.172.jar:na]
at com.amazonaws.services.dynamodbv2.datamodeling.StandardModelFactories$TableBuilder.<init>(StandardModelFactories.java:132) ~[aws-java-sdk-dynamodb-1.11.172.jar:na]
at com.amazonaws.services.dynamodbv2.datamodeling.StandardModelFactories$TableBuilder.<init>(StandardModelFactories.java:116) ~[aws-java-sdk-dynamodb-1.11.172.jar:na]
at com.amazonaws.services.dynamodbv2.datamodeling.StandardModelFactories$StandardTableFactory.getTable(StandardModelFactories.java:107) ~[aws-java-sdk-dynamodb-1.11.172.jar:na]
at com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper.getTableModel(DynamoDBMapper.java:393) ~[aws-java-sdk-dynamodb-1.11.172.jar:na]
at com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper.createQueryRequestFromExpression(DynamoDBMapper.java:1626) ~[aws-java-sdk-dynamodb-1.11.172.jar:na]
at com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper.query(DynamoDBMapper.java:1503) ~[aws-java-sdk-dynamodb-1.11.172.jar:na]
at com.amazonaws.services.dynamodbv2.datamodeling.AbstractDynamoDBMapper.query(AbstractDynamoDBMapper.java:265) ~[aws-java-sdk-dynamodb-1.11.172.jar:na]
at com.furlenco.platform.loggingservice.service.impl.LogServiceimpl.getLogsBasedOnSecondaryIndexUserId(LogServiceimpl.java:86) ~[classes/:na]
at com.furlenco.platform.loggingservice.service.impl.LogServiceimpl.getEventLogsForUserId(LogServiceimpl.java:67) ~[classes/:na]
com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMappingException:@dynamodbindethushkey必须指定哈希GSI名称之一
在com.amazonaws.services.dynamodbv2.datamodeling.StandardAnnotationMaps$FieldMap.globalSecondaryIndexNames(StandardAnnotationMaps.java:345)~[aws-java-sdk-dynamodb-1.11.172.jar:na]
在com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapperFieldModel$Properties$Immutable.(DynamoDBMapperFieldModel.java:459)~[aws-java-sdk-dynamodb-1.11.172.jar:na]
在com.amazonaws.services.dynamodbv2.datamodeling.StandardBeanProperties$Bean.(StandardBeanProperties.java:92)~[aws-java-sdk-dynamodb-1.11.172.jar:na]
在com.amazonaws.services.dynamodbv2.datamodeling.StandardBeanProperties$Bean.(StandardBeanProperties.java:86)~[aws-java-sdk-dynamodb-1.11.172.jar:na]
在com.amazonaws.services.dynamodbv2.datamodeling.StandardBeanProperties$BeanMap.putorflatte(StandardBeanProperties.java:217)~[aws-java-sdk-dynamodb-1.11.172.jar:na]
在com.amazonaws.services.dynamodbv2.datamodeling.StandardBeanProperties$BeanMap.putAll(StandardBeanProperties.java:207)~[aws-java-sdk-dynamodb-1.11.172.jar:na]
在com.amazonaws.services.dynamodbv2.datamodeling.StandardBeanProperties$BeanMap.(StandardBeanProperties.java:198)~[aws-java-sdk-dynamodb-1.11.172.jar:na]
在com.amazonaws.services.dynamodbv2.datamodeling.StandardBeanProperties$CachedBeans.getBeans(StandardBeanProperties.java:55)~[aws-java-sdk-dynamodb-1.11.172.jar:na]
在com.amazonaws.services.dynamodbv2.datamodeling.StandardBeanProperties$CachedBeans.access$100(StandardBeanProperties.java:48)~[aws-java-sdk-dynamodb-1.11.172.jar:na]
在com.amazonaws.services.dynamodbv2.datamodeling.StandardBeanProperties.of(StandardBeanProperties.java:42)~[aws-java-sdk-dynamodb-1.11.172.jar:na]
在com.amazonaws.services.dynamodbv2.datamodeling.StandardModelFactorys$TableBuilder.(StandardModelFactorys.java:132)~[aws-java-sdk-dynamodb-1.11.172.jar:na]
在com.amazonaws.services.dynamodbv2.datamodeling.StandardModelFactorys$TableBuilder.(StandardModelFactorys.java:116)~[aws-java-sdk-dynamodb-1.11.172.jar:na]
在com.amazonaws.services.dynamodbv2.datamodeling.StandardModelFactorys$StandardTableFactory.getTable(StandardModelFactorys.java:107)~[aws-java-sdk-dynamodb-1.11.172.jar:na]
在com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper.getTableModel(DynamoDBMapper.java:393)~[aws-java-sdk-dynamodb-1.11.172.jar:na]
在com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper.createQueryRequestFromExpression(DynamoDBMapper.java:1626)~[aws-java-sdk-dynamodb-1.11.172.jar:na]
在com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper.query(DynamoDBMapper.java:1503)~[aws-java-sdk-dynamodb-1.11.172.jar:na]
在com.amazonaws.services.dynamodbv2.datamodeling.AbstractDynamoDBMapper.query(AbstractDynamoDBMapper.java:265)~[aws-java-sdk-dynamodb-1.11.172.jar:na]
在com.furlenco.platform.loggingservice.service.impl.LogServiceimpl.getLogsBasedOnSecondaryIndexUserId(LogServiceimpl.java:86)~[classes/:na]
在com.furlenco.platform.loggingservice.service.impl.logserviceinpl.getEventLogsForUserId(logserviceinpl.java:67)~[classes/:na]
我有一个表,哈希键作为服务,范围键作为CreatedDate。我试图通过GSI获取结果,但不知怎的,它导致了一个异常
有人能看出我做错了什么吗?

您的异常消息说

@DynamoDBIndexHashKey must specify one of HASH GSI name/names
如果查看类中的所有
@dynamodbindeuthskey
注释,您将看到它们都为
globalSecondaryIndexName
设置了一个值,除了
eventType
上的注释。如果
eventType
应该是GSI哈希键,则需要设置此值。如果
eventType
不应该是GSI的哈希键,则需要从该字段中删除
@dynamodbindeuthskey
注释


有关使用
@DynamoDBImdexHashKey

的更多详细信息,请参阅。它必须如下所示:

@get:DynamoDBIndexHashKey(attributeName = "product", globalSecondaryIndexName = "product-index")
var product: String? = null
将此项也添加到DB定义中:

CreateTableRequest()

 ...

 .withGlobalSecondaryIndexes(GlobalSecondaryIndex()
            .withIndexName(PRODUCT_INDEX)
            .withKeySchema(
               KeySchemaElement(PRODUCT, KeyType.HASH),
               KeySchemaElement(PRODUCT_RANGE, KeyType.RANGE))
            .withProjection(Projection().withProjectionType(ProjectionType.ALL))
            .withProvisionedThroughput(ProvisionedThroughput(1L, 2L)))  

eventType
具有
@dynamodbindeuthskey
注释,但该注释缺少索引名。如果希望
eventType
作为主表的哈希键,则需要使用
@DynamoDBHashKey
。很抱歉,我错误地提到了事件类型,它是具有@DynamoDBHashKey注释的交互服务。对不起,我已经更新了问题。谢谢。我错过了。再次感谢您,它必须是这样的>@get:dynamodbindeuthskey(attributeName=“product”,globalSecondaryIndexName=“product index”)>var-product:String?=无效的