2表之间的多重关系,如何通过休眠设计类模型与数据库的映射



我有 2 个表项目和员工有多个关系。项目有很多员工,员工可以加入很多项目(多对多)。项目有一个员工是团队领导,一个员工可以管理多个项目(多对一)。那么我如何设计数据库,以及类模型与数据库的映射。有人帮助我这是我的代码

类用户

@Entity(name = "USERS")
public class Users {
@Id
@Column(name = "USER_ID", length = 6)
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer userId;
@Column(name = "USER_NAME", length = 50, nullable = false)
private String userName;
@Column(name = "PASS_WORD", length = 50, nullable = false)
private String passWord;
@Column(name = "FULL_NAME", length = 50, nullable = false)
private String fullName;
@Column(name = "EMAIL", length = 50, nullable = false)
private String email;
@Column(name = "PHONE", length = 11, nullable = true)
private String phone;
@Column(name = "STATUS", nullable = true)
private Boolean status;
@ManyToMany(fetch = FetchType.LAZY)
@JsonIgnore
@JoinTable(name = "USERPROJECT", joinColumns = { @JoinColumn(name = 
 "USER_ID") }, inverseJoinColumns = {
        @JoinColumn(name = "PROJECT_ID") })
private List<Project> projects;
@OneToMany(mappedBy = "teamlead")
private List<Project> projectOfTeamLead;
//get set.....
}

类项目

    @Entity(name = "PROJECTS")
    public class Project {
    @Id
    @Column(name = "PROJECT_ID", length = 6)
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer projectId;
    @Column(name = "PROJECT_NAME", length = 50, nullable=false)
    private String projectName;
    @Column(name = "USER_CREATE_ID", length = 6, nullable=false)
    private Integer userCreateId;
    //  @Column(name = "TEAM_LEAD_ID", length = 6, nullable=false)
    //  private Integer teamLeadId;
    @Column(name = "TIME_START", nullable=true)
    private Date timeStart;
    @Column(name = "TIME_END", nullable=true)
    private Date timeEnd;
    @ManyToMany(mappedBy = "projects")
    private List<Users> users;
    @ManyToOne
    @JoinColumn(name = "TEAM_LEAD_ID")
    private Users teamlead;
    //get set...
    }

我认为你需要让你的数据库适合3nf(第三范式)。您正在描述一个使用两个表的数据库,但我认为您至少需要三个表,这样您就可以描述哪些员工在哪个项目中。应使用使用其他两个表中的 PK 的"团队"表。按照惯例,您可以将其命名为"项目员工",因为它分别由"项目"表和"员工"表中的PK组成。我希望这能回答你的问题。如果你不明白我在说什么,我强烈建议你看这个。

最新更新