Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Differenze nella gestione delle stringhe tra la versione 1 e la versione 2 dell'SDK for Java
V1 e V2 gestiscono le stringhe vuote in modo diverso quando inviano dati a DynamoDB:
-
V1: converte le stringhe vuote in valori nulli prima di inviarle a DynamoDB (con conseguente assenza di attributo)
-
V2: invia stringhe vuote come valori effettivi di stringhe vuote a DynamoDB
Importante
Dopo la migrazione alla V2, se non desideri che stringhe vuote vengano archiviate in DynamoDB, devi implementare convertitori personalizzati. Senza convertitori personalizzati, V2 memorizza le stringhe vuote come attributi di stringa vuota effettivi negli elementi DynamoDB, il che differisce dal comportamento della V1 di omettere completamente questi attributi.
Esempio convertitore personalizzato per V2 che converte un attributo di stringa vuoto in null
/** * Custom converter that maintains V1 behavior by converting empty strings to null values * when writing to DynamoDB, ensuring compatibility with existing data. No attribute will be saved to DynamoDB. */ public class NullifyEmptyStringConverter implements AttributeConverter<String> { @Override public AttributeValue transformFrom(String value) { if (value == null || value.isEmpty()) { return AttributeValue.builder().nul(true).build(); } return AttributeValue.builder().s(value).build(); } @Override public String transformTo(AttributeValue attributeValue) { if (attributeValue.nul()) { return null; } return attributeValue.s(); } @Override public EnhancedType<String> type() { return EnhancedType.of(String.class); } @Override public AttributeValueType attributeValueType() { return AttributeValueType.S; } } // V2 usage: @DynamoDbBean public class Customer { private String name; @DynamoDbConvertedBy(NullifyEmptyStringConverter.class) public String getName() { return name; } }