dynamodb java多对一

dynamodb java多对一,java,amazon-dynamodb,Java,Amazon Dynamodb,我想试试dynamodb 我能够保存一个对象。 现在我想尝试创建一个多对一的关联 许多任务应该附加到单个用户 @DynamoDBTable(tableName = "User") public class User { private String id; List<Task> tasks = new ArrayList<Task>(); @DynamoDBHashKey @DynamoDBAutoGeneratedKey pub

我想试试dynamodb

我能够保存一个对象。 现在我想尝试创建一个多对一的关联

许多任务应该附加到单个用户

@DynamoDBTable(tableName = "User")
public class User {
    private String id;
    List<Task> tasks = new ArrayList<Task>();

    @DynamoDBHashKey
    @DynamoDBAutoGeneratedKey
    public String getId() {
        return id;
    }

    @DynamoDBAttribute
    public List<Task> getTasks() {
        return this.tasks;
    }

    public void setTasks(List<Task> taskMap) {
        this.tasks = taskMap;
    }

    public void addTask(Task task){
        this.tasks.add(task);
    }
}

@DynamoDBTable(tableName = "Task")
public class Task {
    private String id;
    private String name;

    @DynamoDBHashKey
    @DynamoDBAutoGeneratedKey
    public String getId() {
        return id;
    }

    public Task(String name) {
        this.name = name;
    }

    @DynamoDBAttribute
    public String getName(){
        return this.name;
    }

    public void setname(String name){
        this.name = name;
    }
}
我知道它不是这样工作的,但也许有人能给我一个如何做的例子

在关系数据库世界中,表看起来是这样的

User
id|.....

Task
id|name

User_Tasks
user_id|task_id
但是如何使用dynamodb以正确的方式进行呢


谢谢

我希望您在单个DynamoDB表(即User)中同时保存用户和任务。请使用@DynamoDBDocument而不是@DynamoDBTable注释任务类

@DynamoDBDocument
public class Task {

}
  • 相应地添加getter/setter和空构造函数

效果很好。。。需要为ID添加setter,为Task类添加空构造函数现在如何更新任务?我必须再次保存整个用户对象吗?或者我可以单独更新一个特定的任务吗?使用mapper我认为很难更新特定的任务。您可能需要使用低级更新项api,并且应该知道列表中需要更新的任务的索引。如果没有任务列表的索引,更新项api将替换整个列表。因此,如果任务快速更改,基本上最好将其存储在不同的选项卡中?是的,最好的方法可能是将任务存储在它们自己的表中,用户ID作为散列键,任务ID作为范围键。这为您提供了一种为用户查询所有任务的简便方法,同时还使您能够轻松更新每个任务,而无需担心其他任务或用户属性。
@DynamoDBDocument
public class Task {

}