【问题标题】:JPA entity design suggestionJPA实体设计建议
【发布时间】:2012-03-04 06:47:01
【问题描述】:

我对 JPA 有一些疑问。我有一个员工表和项目表。当值保存在 Employee 和 Project 表中时没有关系。场景是首先,管理员应该能够创建员工和项目。后来项目经理将每个员工分配到不同的项目。在这里如何将值写入名为 employee_project_assignment 的表中?

employee_id project_id
----------- ----------
100     ABC987
100     DEF876
101     ABC987
102     DEF876

用户界面将如下所示。

当 EmployeeProjectAssignment 表单出现时,项目经理从下拉列表中从不同项目中选择一个项目。他选择了多个他想要参与该项目的员工。在这个 方法。那么如何为这个 EmployeeProjectAssignment 表单创建实体呢?

【问题讨论】:

    标签: java jpa jpa-2.0


    【解决方案1】:

    上表是一个纯连接表,用于实现 Employee 和 Project 之间的 ManyToMany 关联。

    Employee 实体可以有一个 Projects 的集合,和/或 Project 实体可以有一个Employees 的集合(即关系可以是从 Employee 到 Project 的单向关系,或从 Project 到员工的单向关系,或双向的)。

    确定哪种关联更适合您的需求(通常,双向关联使生活更轻松)。如果是双向的,则选择哪一侧是关联的所有者(所有者一侧有一个@JoinTable 注释,另一侧有一个 mappedBy 属性),然后在您的表单处理方法中填充集合。拥有方是必须为 JPA 填充以保持关联的一方。

    假设拥有方是员工:

    employee.getProjects().clear();
    employee.getProjects().addAll(projectsSelectedByAdministrator);
    

    【讨论】:

    • 但是这里的员工实体不包含对项目的任何引用。因为员工实体保存为独立的实体。稍后我们将通过分配将员工映射到项目。
    • 这只是意味着员工中的项目集合最初是空的:您创建了一个员工而没有将他分配给任何项目。
    • 好的。我几乎明白了。谢谢。但还有一个问题。当我们稍后将项目分配给员工时,员工实体本身会再次保存到数据库中,对吗?请你给我示例代码..
    • 没有。新关联保存在连接表中。示例代码:employee.getProjects().add(project);.
    猜你喜欢
    • 1970-01-01
    • 2012-06-15
    • 2011-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-10
    • 1970-01-01
    相关资源
    最近更新 更多