2016-12-06 84 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 to 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类 - 我无法修改的类。 –

相关问题