Spring Data JPA: как объединить две сущности с помощью аннотаций - PullRequest
0 голосов
/ 29 мая 2020

У меня есть две сущности (Студент и Проект), и я хочу объединить их по внешнему ключу "student_id"

@Entity
@Data
public class Project {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String title;
    private Long student_id;
}
@Entity
@Data
public class Student {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;

    @OneToMany
    private List<Project> projects;
}

Просто я хочу получить студентов с проектом list, когда я отправляю запрос GET в репозиторий Student.

Например;

// > json for POST to Project
{
    "title":"java",
    "student_id":1
}
// > json for POST to Student
{
    "name":"Bill Gates"
}

То, что я ожидаю увидеть, когда я отправляю запрос GET студенту, просто выглядит следующим образом:

[
   {
      "id":1,
      "name":"java",
      "projects":[
         {
            "id":1,
            "title":"java"
         }
      ]
   }
]

Применимо ли это с использованием только аннотаций JPA? Заранее спасибо.

1 Ответ

0 голосов
/ 29 мая 2020

Да, применимо. Во-первых, вам нужно изменить student_id на класс student, как это в вашем классе Project

@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name = "student_id",nullable = false)
private Student student;

Во-вторых, вам нужно добавить параметр 'map' к аннотации oneToMany

@OneToMany(mappedBy = "student")
private List<Project> projects;

и вот и все.

Примечание: вы также можете учитывать отношения многие-многие, если в один и тот же проект можно назначить более одного ученика

...