2016-10-01 22 views
1

コンソール経由でdynamodb内のテーブルのキーフィールドに自動番号を追加したい、例えば 。 0,1,2、...dynamodb:レコードをテーブルに追加する際にキーフィールドに自動インクリメント番号を追加する方法

私は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; 
    } 
} 

ここでcon_idの値は空白です。

+0

回答が役に立ちましたか? – notionquest

答えて

3

linkを参照してください。 DynamoDBのベストプラクティスに従って、テーブルのハッシュキーを生成するために1ずつ増加する整数を持つことは推奨されません。プロビジョニングされた容量に従ってテーブルをスケールするには、要求がキー空間全体に均等に分散される必要があります。

UUIDを使用することをお勧めします。 AWS Java SDKを使用している場合は、@DynamoDBAutoGeneratedKeyを使用してハッシュキーを自動的に生成できます。ハッシュキーは文字列として定義する必要があります。キーは、標準的なUUID形式として生成されます。これは、キー空間全体にデータを拡大および拡大するのに役立ちます。 @DynamoDBAutoGeneratedKeyと

Sampleクラス: -

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; 
    } 

} 

ための方法を作成します -

public Boolean createOrder(String productName) { 

     DynamoDBMapper dynamoDBMapper = new DynamoDBMapper(dynamoDBClient); 

     Order order = new Order(); 
     order.setProductName(productName); 

     dynamoDBMapper.save(order); 


     return true; 

    } 

を私は私の春を使用してdynamoDBClientを設定しています。

@Autowired 
private AmazonDynamoDBClient dynamoDBClient; 

このコードは正常にテストされました。 dynamoDBClientが正しく構成されている場合は、動作するはずです。

+0

あなたの提案を自分のコードに使用しようとしましたが、まだ空白の価値があります。コードで質問を編集してみましょう。 –

+0

サンプルコードを更新しました。してみてください。それは動作するはずです。 – notionquest

+0

のような文字列を生成しますか?33e31aa4-00bf-4179-90c7-672fff92366e –

関連する問題