创建Post实体和与User实体的多对一关系

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

步骤1: 在包cn.javatiku.server.main.user中创建名为Post.java的类。

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

步骤3: 添加三个字段:id,description和user。

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

步骤4: 生成Getter和Setter方法。

步骤5: 生成toString()方法。

注意: 在生成toString()时,取消选中user。

步骤6: 用户可以创建多篇帖子,因此添加@ManyToOne注解。User实体与Post实体具有多对一关系。抓取类型将不会检索用户的详细信息,除非我们调用Post.getUser

@ManyToOne(fetch=FetchType.LAZY)  

步骤7: Id是主键,所以需要添加@Id注解。

Post.java

package cn.javatiku.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);  
}  
} 

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

private List<Post> posts  

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

步骤10:生成Getters和Setters。
User.java

package cn.javatiku.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<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;  
}  
@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: 重新启动应用程序。

restful-web-services-many-to-one-relationship.png

我们可以在日志中看到有两个表,一个是post表,一个是user表。Post表通过用户id与User表关联。一个用户可以有多个帖子,它们都有相同的用户id。

步骤12: 现在,打开H2控制台。我们可以看到有两个名为USER和POST的表。

restful-web-services-many-to-one-relationship2.png

步骤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文件中插入的数据。
restful-web-services-many-to-one-relationship3.png

标签: spring, Spring教程, Spring语言学习, Spring框架, Spring框架教程, Spring框架高级教程, spring boot, spring boot入门教程, spring boot学习教程, spring boot下载, spring boot框架入门, spring boot面试题, spring boot笔试题, spring boot学习指南, spring boot技术