现在我有两个表,第一个表叫做 StudentBase ,有三列: id , firstname 和 lastname 。第二个表名为 ResearchAssistant ,有两列: ID 和课程。我设计了这样的表格,因为有不同类型的学生,研究助理就是其中之一。这两个表可以与主键 id 联合在一起。
我正在编写端点 / researchAssistant ,并将以下内容作为 POST 方法的请求主体。
{
"firstname":"Jack",
"lastname":"Peter",
"course":"MATH"
}
我想要的是将名字和姓氏保存到 StudentBase 表中,并将课程保存到 ResearchAssistant 表。并为两者生成相同的 id 。
我想到的第一个想法是构建3个模型类: StudentBase (id,firstname,lastname), ResearchAssistant (id,course)和 ResearchAssistantMixed (名字,姓氏,课程)。我使用 ResearchAssistantMixed 类作为请求体类。获取数据后,我将其分为新的 StudentBase 对象和 ResearchAssistant 对象,然后单独存储它们。
这个过程看起来非常愚蠢,性能应该很低。你有更好的想法吗? Spring Boot如何处理这种情况?谢谢!
答案 0 :(得分:1)
这是一个数据库问题,而不是Spring-boot问题。这就是我的方法(我假设你正在使用像MySql这样的关系数据库和用于ORM的hibernate):
数据库表:
student_base
- id (primary key)
- first_name
_ last_name
research_assistant
- id (primary key)
- student_base_id (foreign key referencing id of student_base)
- course
现在,您可以在Java中使用等效的实体类(用于休眠):
@Entity
@Table(name = "student_base")
public class StudentBase {
@Id
@Column(name = "id")
private Integer id;
@Column(name = "first_name")
private String firstName;
@Column(name = "last_name")
private String lastName;
// getters and setters
}
@Entity
@Table(name = "research_assistant")
public class ResearchAssistant {
@Id
@Column(name = "id")
private Integer id;
@ManyToOne(optional = false)
@JoinColumn(name = "student_base_id")
private StudentBase studentBase;
@Column(name = "course")
private String course;
// getters and setters
}
现在在您的DAO中,您不需要做太多工作,只需保留student_base记录并使用返回的对象来保留research_assistant记录。例如:
StudentBase studentBase = persist(new StudentBase(1, "abc", "xyz");
persist(new ResearchAssistant(1, studentBase, "pqr");
您可以(并且应该)有两个单独的类来接受post API的请求对象(不要使用实体类来接受请求数据)。