Я использую Java 8 и версию AWS SDK 1.11.
У меня есть следующее определение таблицы:
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBAttribute;
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBHashKey;
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBTable;
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBVersionAttribute;
import com.amazonaws.services.dynamodbv2.datamodeling.encryption.DoNotTouch;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Set;
/**
* Mapping between a tenant and the roles they defined to access their S3 Attachment buckets.
*/
@DynamoDBTable(tableName = CustomerRoleTenantMapping.TABLE_NAME)
@Builder
@Data
@NoArgsConstructor
@AllArgsConstructor
@DoNotTouch
public class CustomerRoleTenantMapping {
public static final String TABLE_NAME = "CustomerRoleTenantMapping";
/**
* The identifier of this mapping between the tenant and the roles.
*/
@DynamoDBHashKey(attributeName = "tenant")
private String tenant;
/**
* The name of the tenant.
*/
@DynamoDBAttribute(attributeName = "name")
private String name;
/**
* The system that a tenant has allowed to access their S3 Attachment buckets.
*/
@DynamoDBAttribute(attributeName = "tenantPlatform")
private String tenantPlatform;
/**
* The roles associated to a tenant's S3 Attachment buckets.
*/
@DynamoDBAttribute(attributeName = "customerRoles")
private Set<RoleArn> customerRoles;
@DynamoDBAttribute(attributeName = "version")
@DynamoDBVersionAttribute
private Long version;
}
Класс RoleArn определяется следующим образом:
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBAttribute;
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBDocument;
import com.amazonaws.services.dynamodbv2.datamodeling.encryption.DoNotTouch;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.NonNull;
import lombok.Setter;
import java.util.Objects;
/**
* Model for AWS Role ARNs.
*/
@DynamoDBDocument
@Builder
@Setter
@Getter
@NoArgsConstructor
@AllArgsConstructor
@DoNotTouch
public class RoleArn {
/**
* The Role Arn.
*/
@NonNull
@DynamoDBAttribute(attributeName = "arn")
private String arn;
/**
* The description of the role.
*/
@NonNull
@DynamoDBAttribute(attributeName = "description")
private String description;
@Override
public boolean equals(Object obj) {
if (obj instanceof RoleArn) {
return ((RoleArn) obj).arn.equals(arn);
}
return false;
}
@Override
public int hashCode() {
return Objects.hash(arn);
}
}
Моя проблема заключается в том, что при попытке сохранить CustomerRoleTenantMapping Объект в моем DDB, RoleArn хранится не как JSON, а как ha sh экземпляра.
Просто к сведению, причина, по которой мне пришлось реализовать equals () и hashCode () в RoleArn, состоит в том, чтобы избежать дублирования объектов RoleArns в одном экземпляре CustomerRoleTenantMapping путем сравнения только атрибута arn двух экземпляров RoleArns. ,
Что я могу сделать, чтобы сохранить JSON набора вместо ха sh?