📜  创建发布实体并与用户实体建立多对一关系

📅  最后修改于: 2021-01-12 01:29:08             🧑  作者: Mango

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

在本节中,我们将创建一个Post实体,其中包含与User实体的多对一关系。

第1步:创建与包com.javatpoint.server.main.user名称Post.java类。

步骤2: Post.java是一个实体,因此我们需要添加@Entity批注。

步骤3:添加三个字段: id,descriptionuser

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.javatpoint.server.main.user;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
@Entity
public class Post 
{
@Id
@GeneratedValue
private 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;
}
@Override
public String toString() 
{
return String.format("Post [id=%s, description=%s]", id);
}
}

我们已经在Post实体一侧配置了关系。现在,我们需要在用户实体一侧配置关系。

用户可以列出帖子,因此帖子具有一对多关系。

步骤8:打开User.java文件并创建帖子列表。

private List posts

步骤9:添加具有属性(mappedBy =“ user”)的注释@OneToMany 。它将在Post实体中创建一个关系列。

步骤10:生成Getter和Setter。

User.java

package com.javatpoint.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")
@Entity
public class User 
{
//Id as a primary key
@Id
@GeneratedValue
private 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 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 getPosts() 
{
return posts;
}
public void setPosts(List posts) 
{
this.posts = posts;
}
@Override
public 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 Console 。我们可以看到有两个名为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 Console并执行查询SELECT * FROM POST

它显示了我们插入到data.sql文件中的数据。