我正在尝试使用Java API在DynamoDB中创建表格。
问题:它只会在表格中创建哈希键索引,而没有其他属性。
POJO类
转换器
「有人看到这里的问题吗?」 「这已经解决了」 「我存储复杂对象 InsuranceLobData 的方式出现了问题。」
问题:它只会在表格中创建哈希键索引,而没有其他属性。
private void createTable(DynamoDBMapper mapper, AmazonDynamoDBClient amazonDynamoDBClient) {
CreateTableRequest createTableRequest = mapper.generateCreateTableRequest(InsuranceData.class);
createTableRequest.setProvisionedThroughput(new ProvisionedThroughput(25L, 25L));
amazonDynamoDBClient.createTable(createTableRequest);
}
private void run(){
AmazonDynamoDBClient amazonDynamoDBClient = getDynamoDBLocalClient();
DynamoDBMapper mapper = new DynamoDBMapper(amazonDynamoDBClient);
InsuranceData insuranceData = new InsuranceData();
createTable(mapper,amazonDynamoDBClient);
}
POJO类
@DynamoDBTable(tableName = "InsuranceData")
public class InsuranceData {
private Integer siteId;
private String lob;
private InsuranceLobData multiItemLobData;
private InsuranceLobData standaloneLobData;
@DynamoDBHashKey(attributeName = "siteId")
public Integer getSiteId() {
return siteId;
}
public void setSiteId(Integer siteId) {
this.siteId = siteId;
}
@DynamoDBAttribute(attributeName = "F")
public String getLob() {
return lob;
}
public void setLob(String lob) {
this.lob = lob;
}
@DynamoDBTypeConverted(converter = InsuranceLobConverter.class)
public InsuranceLobData getMultiItemLobData() {
return multiItemLobData;
}
public void setMultiItemLobData(InsuranceLobData multiItemLobData) {
this.multiItemLobData = multiItemLobData;
}
@DynamoDBTypeConverted(converter = InsuranceLobConverter.class)
public InsuranceLobData getStandaloneLobData() {
return standaloneLobData;
}
public void setStandaloneLobData(InsuranceLobData standaloneLobData) {
this.standaloneLobData = standaloneLobData;
}
}
转换器
public class InsuranceLobConverter implements DynamoDBTypeConverter<String, InsuranceLobData> {
private final static Gson gson = new Gson();
@Override
public String convert(InsuranceLobData object) {
return gson.toJson(object);
}
@Override
public InsuranceLobData unconvert(String object) {
return gson.fromJson(object, InsuranceLobData.class);
}
}
「有人看到这里的问题吗?」 「这已经解决了」 「我存储复杂对象 InsuranceLobData 的方式出现了问题。」
@DynamoDBDocument
public class InsuranceLobData {
private boolean isActive;
private Set<String> locale;
private AbacusData abacusData;
private boolean isActiveForMobile;
private boolean isActiveForDesktop;
@Override
public String toString() {
return "InsuranceLobData{" +
"isActive=" + isActive +
", locale=" + locale +
", abacusData=" + abacusData +
", isActiveForMobile=" + isActiveForMobile +
", isActiveForDesktop=" + isActiveForDesktop +
'}';
}
public InsuranceLobData(){}
public InsuranceLobData(boolean isActive, Set<String> locale, AbacusData abacusData, boolean isActiveForMobile, boolean isActiveForDesktop) {
this.isActive = isActive;
this.locale = locale;
this.abacusData = abacusData;
this.isActiveForMobile = isActiveForMobile;
this.isActiveForDesktop = isActiveForDesktop;
}
@DynamoDBAttribute(attributeName = "isActive")
public boolean isActive() {
return isActive;
}
public void setActive(boolean active) {
isActive = active;
}
@DynamoDBAttribute(attributeName = "locale")
public Set<String> getLocale() {
return locale;
}
public void setLocale(Set<String> locale) {
this.locale = locale;
}
@DynamoDBTypeConvertedJson
public AbacusData getAbacusData() {
return abacusData;
}
public void setAbacusData(AbacusData abacusData) {
this.abacusData = abacusData;
}
@DynamoDBAttribute(attributeName = "mobile")
public boolean isActiveForMobile() {
return isActiveForMobile;
}
public void setActiveForMobile(boolean activeForMobile) {
isActiveForMobile = activeForMobile;
}
@DynamoDBAttribute(attributeName = "desktop")
public boolean isActiveForDesktop() {
return isActiveForDesktop;
}
public void setActiveForDesktop(boolean activeForDesktop) {
isActiveForDesktop = activeForDesktop;
}
}
没有必要添加DynamoDBDocument注释。@DynamoDBDocument