创建发布实体以及与用户实体的多对一关系

在本节中, 我们将创建一个Post实体, 其中包含与User实体的多对一关系。
步骤1:在com.srcmini.server.main.user包中创建一个名称为Post.java的类。
步骤2:Post.java是一个实体, 因此我们需要添加@Entity批注。
步骤3:添加三个字段:ID, 描述和用户。

private Integer id; private String description; private User user;

步骤4:生成Getter和Setter。
步骤5:生成toString()。
切记:在toString()生成期间取消选中用户。
第6步:一个用户可以写很多帖子, 因此添加@ManyToOne批注。用户实体与发布实体具有多对一关系。除非我们调用Post.getUser, 否则获取类型将不会检索用户的详细信息。
@ManyToOne(fetch=FetchType.LAZY)

步骤7:Id是主键, 因此我们需要添加@Id注释。
Post.java
package com.srcmini.server.main.user; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.ManyToOne; @Entitypublic class Post {@Id@GeneratedValueprivate Integer id; private String description; //many to one mapping @ManyToOne(fetch=FetchType.LAZY)private User user; public Integer getId() {return id; }public void setId(Integer id) {this.id = id; }public String getDescription() {return description; }public void setDescription(String description) {description = description; }public User getUser() {return user; }public void setUser(User user) {this.user = user; }@Overridepublic String toString() {return String.format("Post [id=%s, description=%s]", id); }}

我们已经在Post实体一侧配置了关系。现在, 我们需要在用户实体一侧配置关系。
用户可以发布帖子列表, 因此帖子具有一对多关系。
步骤8:打开User.java文件并创建帖子列表。
private List< Post> posts

步骤9:添加具有属性(mappedBy =“ user”)的注释@OneToMany。它将在Post实体中创建一个关系列。
步骤10:生成Getter和Setter。
User.java
package com.srcmini.server.main.user; import java.util.Date; import java.util.List; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.OneToMany; import javax.validation.constraints.Past; import javax.validation.constraints.Size; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @ApiModel(description="All details about the user")@Entitypublic class User {//Id as a primary key@Id@GeneratedValueprivate Integer id; @Size(min=5, message="Name should have atleast 5 characters")@ApiModelProperty(notes="name should have atleast 5 characters")private String name; @Past@ApiModelProperty(notes="Birth date should be in the past")private Date dob; //default constructor @OneToMany(mappedBy="user")private List< Post> posts; protected User(){ }public User(Integer id, String name, Date dob) {super(); this.id = id; this.name = name; this.dob = dob; }public Integer getId() {return id; }public void setId(Integer id) {this.id = id; }public String getName() {return name; }public void setName(String name) {this.name = name; }public Date getDob() {return dob; }public void setDob(Date dob) {this.dob = dob; }public List< Post> getPosts() {return posts; }public void setPosts(List< Post> posts) {this.posts = posts; }@Overridepublic String toString() {//return "User [id=" + id + ", name=" + name + ", dob=" + dob + "]"; return String.format("User [id=%s, name=%s, dob=%s]", id, name, dob); }}

步骤11:重新启动应用程序。
创建发布实体以及与用户实体的多对一关系

文章图片
我们可以在日志中看到有两个表post和user。 Post表通过用户ID链接到User表。一个用户可以有多个帖子, 并且所有帖子都具有相同的用户ID。
步骤12:现在, 打开H2控制台。我们可以看到有两个名为USER和POST的表。
创建发布实体以及与用户实体的多对一关系

文章图片
步骤13:打开我们之前创建的data.sql文件, 并将数据插入POST表。我们插入了以下数据:
data.sql
insert into user values(101, sysdate(), 'John'); insert into user values(102, sysdate(), 'Robert'); insert into user values(104, sysdate(), 'Andrew'); insert into user values(105, sysdate(), 'Jack'); insert into post values(111, 'first post', 101); insert into post values(112, 'second post', 101); insert into post values(113, 'third post', 104);

步骤14:重新启动应用程序。
步骤15:重新启动H2控制台并执行查询SELECT * FROM POST;
【创建发布实体以及与用户实体的多对一关系】它显示了我们插入到data.sql文件中的数据。
创建发布实体以及与用户实体的多对一关系

文章图片

    推荐阅读