2017-05-31 50 views
0

现在我有两个表,表头叫做StudentBase,有三列:ID名字姓氏。第二个表格叫ResearchAssistant并且有两列:idcourse。我设计了这样的表格,因为有不同类型的学生,研究助理就是其中之一。这两个表格可以与主键ID联合在一起。如何使用Spring Boot将数据分成两个表?

我正在编写一个端点/researchAssistant并采取以下内容作为请求主体POST方法。

{ 
    "firstname":"Jack", 
    "lastname":"Peter", 
    "course":"MATH" 
} 

我要的是,拯救姓氏StudentBase表并保存当然ResearchAssistant表。并为两者生成相同的id

第一个想法在我脑海中正在建设3模型类:StudentBase(ID,名字,姓氏),ResearchAssistant(ID,当然)和ResearchAssistantMixed(名字,姓氏,当然)。我使用ResearchAssistantMixed类作为请求主体类。获取数据后,我将它分成一个新对象和一个ResearchAssistant对象,然后我将它们分开存储。

这个过程看起来很愚蠢,性能应该很低。你有更好的点子吗? Spring Boot如何处理这种情况?谢谢!

+0

这将是可能的普通的SQL。 –

+0

谢谢@a_horse_with_no_name您能否提供更多详细信息?或者一些文件?我是db设计的新手。 –

回答

1

这是一个数据库问题,而不是弹簧引导问题。这是我怎么会接近(我假设你使用的是关系数据库如MySQL和休眠的ORM):

数据库表:

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实体类(对Hibernate):

@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"); 

你可以(也应该)有两个单独的类来接受这个职位API的请求对象(不使用实体类接受请求数据)。

相关问题