gpt4 book ai didi

java - DynamoDBMapper 注释。一对多映射

转载 作者:行者123 更新时间:2023-12-01 11:46:59 27 4
gpt4 key购买 nike

我在 Amazon DynamoDB 中有一个员工表(即项目)。该表的属性是 {employee_id, name, manager_id}

该类在 Java 中使用以下方式表示:

@DynamoDBTable(tableName = "Employee")
public class Employee {
private String employeeId;
private String name;
private List<Employee> subordinates;

@DynamoDBHashKey
public String getEmployeeId() {
return employeeId;
}

public void setEmployeeId(final String employeeId) {
this.employeeId = employeeId;
}

@DynamoDBAttribute(attributeName = "name")
public String getIntegerAttribute() {
return name;
}

public void setName(String name) {
this.name = name;
}

public List<Employee> getSubordinates() {
return subordinates;
}

public void setSubordinates(List<Employee> subordinates) {
this.subordinates = subordinates;
}
}

给出以下组织结构图

A
-B
|
--- B1
|
--- B2
-C
|
--- C1

如果我请求员工A、B和C应加载为A的下属。B1和B2应加载为B的下级。C1应加载为C的下级。

使用 Hiberate 的 @OneToMany 注解可以轻松实现上述功能。在 Dynamo 中实现这一目标的推荐方法是什么?

谢谢!

最佳答案

DynamoDB 的 HashRange 架构本身支持一对多。

您可以像这样创建表格:

Subordinate-Table (for storing relationship)
HashKey: EmployeeId (for manager)
RangeKey: EmployeeId (for subordinates)

Employee-Table (for storing employee info)
HashKey: EmployeeId
Attribute: Name

对于您的示例组织结构图,您的从属表将如下所示:

Hash: A Range: B
Hash: A Range: C
Hash: B Range: B1
Hash: B Range: B2
Hash: C Range: C1

要获取经理A的所有下属,只需执行dynamdob.query(HashKey=="A")

关于直接获取员工数据而无需额外调用员工表的问题:您可以将上面的两个表合并为一个表:

Company-Structure-Table:
HashKey: EmployeeId (manager)
RangeKey: EmployeeId (subordinates)
Attribute: Name (name of the subordinate)

关于避免手动获取经理下面的所有下属(递归搜索)的第二个问题,我的想法是:DynamoDB 为您提供了一个数据库原语,您可以在其上构建应用程序。您希望设计模式以使原语非常高效。您可以在 DynamoDB 之上构建自己的逻辑。递归搜索经理下面的所有员工是这些特定于应用程序的逻辑之一。您可以轻松构建它并对其进行并行化。我认为映射器库不包含它。

关于java - DynamoDBMapper 注释。一对多映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29069224/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com