2016-12-06 15 views
0

オブジェクトをDynamoDBに保存しようとしています。これを行う最も簡単な方法は@DynamoDBDocumentでオブジェクトに注釈を付けることです。 私の場合、保存したいオブジェクトは、私が変更できないパッケージに属しています。インポートされたオブジェクトをJavaアプリケーションのDynamoDBに保存する

私はjava sdkを使用しています。

import not.my.package.Outsider; 

@DynamoDBTable(tableName = "DynamoTable") 
public class DynamoTable { 
    private Outsider outsider; 
    //getters... 
    //setters... 
} 

私はこれらのオブジェクトをどのように保存することができますか?ビジネス目的でDynamoからSQLへのプラグインを使用しているため、これらをストリングとして保存したくありません。おかげさまで

+0

サンプルデータを表示します。 – notionquest

+0

@notionquest - 私はコードの例を追加しました。それは役に立ちますか? –

答えて

0

最初に、OPにはパーティションキーとソートキーに関する情報はありません。以下のコードは、注釈@DynamoDBAutoGeneratedKeyを使用してパーティションキーを自動的に生成します。ユースケースに基づいて変更することができます。

Orderクラス - DynamoTable

と同様に
@DynamoDBTable(tableName = "Order") 
public class Order implements Serializable { 

    private static final long serialVersionUID = -3534650012619938612L; 

    private String orderId; 

    private String productName; 

    private Integer createDate; 

    private Outsider outsider; 

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

    @DynamoDBAttribute(attributeName = "createDate") 
    public Integer getCreateDate() { 
     return createDate; 
    } 

    public void setCreateDate(Integer createDate) { 
     this.createDate = createDate; 
    } 

    @DynamoDBAttribute(attributeName = "outsider") 
    public Outsider getOutsider() { 
     return outsider; 
    } 

    public void setOutsider(Outsider outsider) { 
     this.outsider = outsider; 
    } 

} 

アウトサイダークラス: - アウトサイダーのクラスで

属性は、DynamoDBのテーブル内の地図属性として保存されます。

@DynamoDBDocument 
public class Outsider implements Serializable{ 

    private static final long serialVersionUID = 4449726365885112352L; 

    private String firstName; 
    private String lastName; 

    public String getFirstName() { 
     return firstName; 
    } 
    public String getLastName() { 
     return lastName; 
    } 
    public void setFirstName(String firstName) { 
     this.firstName = firstName; 
    } 
    public void setLastName(String lastName) { 
     this.lastName = lastName; 
    } 

} 

データを保存するためのコード: -

このコードは、限り、あなたはdynamoDBClientオブジェクトを持っているように動作するはずです。私はSpringを使用してオブジェクトをサービスクラスに挿入しました。複数の方法があります。

public Boolean createOrderWithOutsider(String productName, Outsider outsider) { 

    DynamoDBMapper dynamoDBMapper = new DynamoDBMapper(dynamoDBClient); 

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

    dynamoDBMapper.save(order); 

    System.out.println("Order id : " + order.getOrderId()); 

    return true; 

} 

テストコード: -

@Test 
public void createOrderWithOutsider() { 

    Outsider outsider = new Outsider(); 
    outsider.setFirstName("John"); 
    outsider.setLastName("Micheal"); 

    Assert.isTrue(tableOperations.createOrderWithOutsider("Pepsi", outsider)); 
} 

接続試料: - サービス・クラス内の

<bean id="amazonDynamoDB" class="com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient"> 
    <constructor-arg ref="amazonAWSCredentials" /> 
    <property name="endpoint" value="${amazon.dynamodb.endpoint}" /> 
</bean> 

Autowired: -

テーブルに保存の

サンプル・データ: -

Sample item saved in DynamoDB

+0

私の質問で述べたように、Outsiderオブジェクトを変更することはできません。あなたの返事では、@DynamoDBDocumentをOutsiderクラスに追加しました。これは私が変更できないクラスです。 –

関連する問題