aws / aws/aws-sdk-java-v2

TableSchema.converterForAttribute() returns wrong generic type

Offen
#3,965 3 Kommentare 3 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
bug dynamodb-enhanced p2
Vorherrschende Sprache
Java
Sterne
2.6k
Forks
1k
Ø Merge
2 T. 9 Std.
Gemergte PRs (30 T.)
51

Beschreibung

### Describe the bug

The `TableSchema` interface has a method, `converterForAttribute(Object key)`, which returns an `AttributeConverter`. This AttributeConverter is meant to convert the attribute behind the given key. Unfortunately, the generic type here (`T`) is the type for the table record, not for the attribute.

If I have the following DynamoDbBean (non-compilable, just for explanation purposes):

```java
@DynamoDbBean
public class ShoppingCartItem{
public static final String CUSTOMER_ID_SECONDARY_INDEX_NAME = "shopping_cart_item_by_customer_id";

private UUID customerId;

@DynamoDbSecondaryPartitionKey(indexNames = CUSTOMER_ID_SECONDARY_INDEX_NAME)
public UUID getCustomerId() {
return customerId;
}
}
```

If then create a corresponding `DynamoDbTable` and try fetching the converter for the secondary partition key:

```java
DynamoDbTable table = ...;

String partitionKey = table.tableSchema().tableMetadata().indexPartitionKey(ShoppingCartItem.CUSTOMER_ID_SECONDARY_INDEX_NAME);

AttributeConverter converter = table.tableSchema().converterForAttribute(partitionKey);
```

The `AttributeConverter` returned is of type `AttributeConverter` instead of type `AttributeConverter`. This makes it impossible to use the TableSchema to fetch the corresponding AttributeConverter, because it will always return an AttributeConverter scoped to the type of the table, not of the attribute.

### Expected Behavior

`TableSchema.converterForAttribute(Object key)` should return a generic type other than `AttributeConverter` so callers can use it properly.

### Current Behavior

Described above.

### Reproduction Steps

Described above.

### Possible Solution

Change the return type of `TableSchema.converterForAttribute(Object key)`.

### Additional Information/Context

_No response_

### AWS Java SDK version used

dynamodb-enhanced-2.20.56

### JDK version used

1.8

### Operating System and version

macOS 13.3.1

Beitragsleitfaden

Beitragsleitfaden öffnen

Rechercherichtung

Beginne am Einstiegspunkt TableSchema.converterForAttribute(Object key) und verfolge seine Deklaration, Implementierungen und Aufrufer im erweiterten DynamoDB-Modul. Überprüfe den generischen Vertrag anhand des ShoppingCartItem-Beispiels: Ein sekundärer Partitionsschlüssel, der von UUID unterstützt wird, sollte einen AttributeConverter bereitstellen, ohne andere TableSchema-Nutzer zu beeinträchtigen.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
aws, java
Bereich
backend-api-design, databases
Issue-Typ
Bug
Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Aktivitätsstatus
Veraltet
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
30/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.