mình hơi băn khoăn khi thiết kế database mà giữa 2 bảng có nhiều mối quan hệ
Ví dụ như 2 bảng employee và project. có quan hệ nhiều nhiều 1 project có nhiều employee, 1 employee có thể làm cho nhiều project( trường hợp này thì dùng bảng phụ), quan hệ 1 nhiều, 1 employee có thể là team leader của nhiều dự án, 1 dự án có một team leader. cái quan hệ 1 nhiều này thì nên làm như thế nào cho hợp lý ạ, và nên thiết kế các class model như thế nào để thể hiện đúng các mối quan hệ này.
class user
@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.....
}
class project
@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...
}