【发布时间】:2021-10-16 10:00:44
【问题描述】:
我是 Spring Boot JPA 的新手
我对 JPA 实体映射有疑问。
我的 MySql DB 中有 4 个表
空间、项目、问题、成员
SPACE 是包含多个 PROJECT 的大项目。
PROJECT 包含多个 ISSUE。
MEMBER 只能加入 1 个 SPACE 和 MEMBER 属于 SPACE 的多个 PROJECT。 MEMBER可以写多个ISSUE
在这种情况下,我的 ERD 模型是否正确?
请检查我的 jpa 映射。 如有不妥,请指出。
SPACE
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "space_no")
private Long spaceNo;
@NotEmpty
@Column(name = "space_name", unique=true, length = 100)
private String spaceName;
/** 1:N relation */
@OneToMany(mappedBy = "smsSpace")
private List<PmsProject> pmsProjects = new ArrayList<>();
PROJECT
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "project_no")
private Long projectNo;
@Column(name ="space_no")
private Long spaceNo;
@Column(name = "project_name", length = 100)
private String projectName;
/** 1:N relation */
@OneToMany(mappedBy = "pmsProject")
private List<ImsIssue> imsIssues = new ArrayList<>();
@OneToMany(mappedBy = "pmsProject")
private List<PmsProjectMember> projectMembers = new ArrayList<>();
/** N:1 relation */
@ManyToOne
@JoinColumn(name = "space_no", referencedColumnName = "space_no", insertable = false, updatable = false)
private SmsSpace smsSpace;
MEMBER
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "member_no")
private Long memberNo;
@Column(name = "mail_address", unique=true, length = 100)
private String mailAddress;
@Column(name = "name", length = 100)
private String name;
@Column(name = "keyword", length = 1000)
private String keyword;
@Column(name = "image", length = 1000)
private String image;
@Column(name = "password", length = 1000)
private String password;
@Column(name = "user_id", length = 50)
private String userId;
@Enumerated(EnumType.STRING)
private MemberRole role;
public void encodingPassword(String password) {
this.password = password;
}
/** 1:N realtion */
@OneToMany(mappedBy = "mmsMember")
private List<PmsProjectMember> projectMembers = new ArrayList<>();
ISSUE
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "issue_no")
private Long issueNo;
@Column(name ="project_no")
private Long projectNo;
@Column(name = "issue_name", length = 1000)
private String issueName;
@Column(name = "priority")
private Long priority;
@Column(name = "status", length = 20)
private String status;
@Column(name = "summary", length = 100)
private String summary;
@Column(name = "is_overdue")
private Long isOverdue;
@Column(name = "issue_type_cd")
private String issueTypeCd;
/** N:1 relation */
@ManyToOne
@JoinColumn(name = "project_no", referencedColumnName = "project_no", insertable = false, updatable = false)
private PmsProject pmsProject;
PROJECTMEMBER
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "group_no")
private Long groupNo;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "member_no")
private MmsMember mmsMember;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "project_no")
private PmsProject pmsProject;
我已经想了好几天了,但由于我缺乏知识,我无法解决它。请帮帮我。
【问题讨论】:
-
在回答之前我先问你一件事,你是一般数据库新手吗?
-
@A.Caldarigi 我几乎是新人。为什么?
-
关于 ERD:为什么您的 project 表中有 Member_no?有什么用?在你的 issue 表中有一个 Member_no,那个应该是一个 Fk。(你只希望一个用户出现在那个问题中?)你不应该注意哪个用途是在哪个空间中?
-
@A.Caldarigi 非常感谢您的回答。我按照你说的修改了。我添加了 PROJECTMEMBER JPA 映射。项目 M:N 成员。 JPA实体映射有问题吗?
-
在JPA实体中存在各种错误:首先都是多对多关系,不需要任何额外的实体,您使用@ManyToMany注释在每个实体上映射一个额外的字段,更多信息可以在这里找到@ 987654322@
标签: mysql spring spring-boot jpa