Nah*_*rje 1 java amazon-dynamodb
我想通过控制台将动态数字添加到dynamodb中表的关键字段,例如0,1,2,...
我有contact_us想要的列,其列具有自动ID增量。请帮我解决一下这个。
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBAutoGeneratedKey;
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBHashKey;
import com.amazonaws.services.dynamodbv2.model.AttributeValue;
public class ContactUs extends HttpServlet {
String con_id;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try{
// ...
// ...
Map<String, AttributeValue> item = newRecord();
//System.out.println(item);
// ...
dbObject.addRecord(item, "contact_us");
}catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
private Map<String, AttributeValue> newRecord() {
Map<String, AttributeValue> item = new HashMap<String, AttributeValue>();
con_id = getConID();
dateTimeTimestamp = new SysDateTimeTimestamp();
//Need to add con_id which will be auto id.
item.put("con_id", new AttributeValue(con_id));
// ...
// ...
return item;
}
@DynamoDBHashKey(attributeName = "con_id")
@DynamoDBAutoGeneratedKey
public String getConID(){
return con_id;
}
public void setConID(String con_id){
this.con_id = con_id;
}
}
Run Code Online (Sandbox Code Playgroud)
在这里,我收到con_id值空白。
请参考此链接。根据DynamoDB中的最佳做法,建议不要使用以1递增的整数来生成表的哈希键。为了使表能够根据所提供的容量进行扩展,请求应该在关键空间中平均分配。
推荐的方法是使用UUID。如果您使用的是AWS Java SDK,则可以使用@DynamoDBAutoGeneratedKey来自动生成哈希密钥。哈希键应定义为字符串。密钥将以标准UUID格式生成,这将有助于在密钥空间中扩展和扩展数据。
@DynamoDBAutoGeneratedKey的示例类:-
import java.io.Serializable;
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBAttribute;
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBAutoGeneratedKey;
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBHashKey;
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBTable;
@DynamoDBTable(tableName = "Order")
public class Order implements Serializable {
private static final long serialVersionUID = -3534650012619938612L;
private String orderId;
private String productName;
@DynamoDBHashKey(attributeName = "orderId")
@DynamoDBAutoGeneratedKey
public String getOrderId() {
return orderId;
}
public void setOrderId(String orderId) {
this.orderId = orderId;
}
@DynamoDBAttribute(attributeName = "productName")
public String getProductName() {
return productName;
}
public void setProductName(String productName) {
this.productName = productName;
}
}
Run Code Online (Sandbox Code Playgroud)
创建订单方法:-
public Boolean createOrder(String productName) {
DynamoDBMapper dynamoDBMapper = new DynamoDBMapper(dynamoDBClient);
Order order = new Order();
order.setProductName(productName);
dynamoDBMapper.save(order);
return true;
}
Run Code Online (Sandbox Code Playgroud)
我dynamoDBClient使用Spring 进行了配置。
@Autowired
private AmazonDynamoDBClient dynamoDBClient;
Run Code Online (Sandbox Code Playgroud)
此代码已成功测试。如果正确配置了dynamoDBClient,它应该可以工作。