2017-11-14 17 views
0

私はdynamodbを試したかったdynamodb java many to one

私は1つのオブジェクトを保存することができました。 私は多対1の関連付けを作成しようとしました。

複数のタスクを1人のユーザーに割り当てることができます。

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

と今私はcorespondingタスク

Task task1 = new Task("test"); 
Task task2 = new Task("test2"); 
User user = new User(); 
user.addTask(task1); 
user.addTask(task2); 
userRepository.save(user); 

でユーザーを保存しようとしている私はそれがこのように動作しませんが、多分誰かが私にそれを行う方法の例を与えることができます知っています。

リレーショナルデータベースの世界ではテーブルはこの

User 
id|..... 

Task 
id|name 

User_Tasks 
user_id|task_id 

のようになります。しかし、どのようDynamoDBの

THANKSでそれを正しい方法を行うには!

答えて

1

UserとTaskの両方を1つのDynamoDBテーブル(User)に保存してください。 @DynamoDBTableではなく@DynamoDBDocumentでタスククラスに注釈を付けてください。

@DynamoDBDocument 
public class Task { 

} 
  • 応じゲッター/セッターを追加し、正常に動作します空のコンストラクタ
+0

...どのように私は更新しないIDとタスククラス – splitiii

+0

のための空のコンストラクタのためのセッターを追加する必要が今仕事ですか?ユーザーオブジェクト全体を再度保存する必要がありますか?特定のタスクを個人的に更新することはできますか? – splitiii

+0

マッパーの使用特定のタスクを更新するのは難しいと思います。低レベルの更新アイテムapiを使用する必要があり、更新が必要なリスト内のタスクのインデックスを知っている必要があります。タスクリストのインデックスがなければ、更新項目apiはリスト全体を置き換えます。 – notionquest