Skip to content

Query by Inner class key - enhanced client #2618

Closed
@reply2srij

Description

@reply2srij

My project has a structure similar to below. How do I query by InnerClassPrimaryKey? Tried to use filterExpression but that is not working.

AWS Java SDK version used: AWS SDK 2.16.99
JDK version used: Open JDK 11
Operating System and version: Windows 10

@DynamoDbBean
public class OuterClass {	
	private String outerClassPrimaryKey;	
	private List<InnerClass> innerClassList;

	@DynamoDbPartitionKey
	public String getOuterClassPrimaryKey() { return outerClassPrimaryKey; }
	public void setOuterClassPrimaryKey(String outerClassPrimaryKey) { this.outerClassPrimaryKey = outerClassPrimaryKey; }
	public List<InnerClass> getInnerClassList() { return innerClassList; }
	public void setInnerClassList(List<InnerClass> innerClassList) { this.innerClassList = innerClassList; }
}

@DynamoDbBean
public class InnerClass {
	private String innerClassPrimaryKey;
	private String innerClassAttribute1;
	private String innerClassAttribute2;

	@DynamoDbPartitionKey
	public String getInnerClassPrimaryKey() { return innerClassPrimaryKey; }
	public void setInnerClassPrimaryKey(String innerClassPrimaryKey) { this.innerClassPrimaryKey = innerClassPrimaryKey; }
	public String getInnerClassAttribute1() { return innerClassAttribute1; }
	public void setInnerClassAttribute1(String innerClassAttribute1) { this.innerClassAttribute1 = innerClassAttribute1; }
	public String getInnerClassAttribute2() { return innerClassAttribute2; }
	public void setInnerClassAttribute2(String innerClassAttribute2) { this.innerClassAttribute2 = innerClassAttribute2; }
}

public class InnerOuterDynamoDbService {
	private DynamoDbClient ddb;
	private DynamoDbEnhancedClient eddb;
	private TableSchema<OuterClass> outerClassSchema;
	private DynamoDbTable<OuterClass> outerClassTable;

	public InnerOuterDynamoDbService(DynamoDbClient ddb) {
		this.ddb = ddb;
		this.eddb = DynamoDbEnhancedClient.builder().dynamoDbClient(ddb).build();
		this.outerClassSchema = TableSchema.fromClass(OuterClass.class);
		this.outerClassTable = eddb.table(OuterClass.class.getSimpleName(), outerClassSchema);
	}
	public OuterClass getOuterClass(String key) {
		return outerClassTable.getItem(Key.builder().partitionValue(key).build());
	}
	public OuterClass getOuterClassByInnerPk(String outerClassPrimaryKey, String innerClassPrimaryKey) {
		AttributeValue attribute = AttributeValue.builder().s(innerClassPrimaryKey).build();

		Expression expression = Expression.builder().expression("innerClassPrimaryKey = :value")
				.putExpressionValue(":value", attribute).build();

		Key partitionKey = Key.builder().partitionValue(outerClassPrimaryKey).build();
		QueryConditional queryConditional = QueryConditional.keyEqualTo(partitionKey);

		PageIterable<OuterClass> results = outerClassTable.query(
				QueryEnhancedRequest.builder().queryConditional(queryConditional).filterExpression(expression).build());
		return results.items().stream().collect(Collectors.toList()).get(0);
	}

	public void putOuterClass(OuterClass item) { outerClassTable.putItem(item); }

	public void createOuterTable() {
		outerClassTable.createTable();
		outerClassTable.tableSchema().tableMetadata().toString();
	}
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions