Моя проблема заключается в том, что, когда я назначаю проект сотруднику с помощью метода addProject
, он создает enless l oop, потому что проект назначен для projectList, в этом списке проектов находится проект, который содержит человек Список с человеком, которому я назначаю проект. Я думаю, что вы получите l oop, как вы можете видеть ниже в ответе json. Кто-нибудь знает, где я запутался? Я думаю, что мне нужно переосмыслить свою концепцию.
Я посмотрел на DTO, но не думаю, что это моя конкретная проблема c.
[
{
"id": 1,
"nachname": "Kämpfer",
"vorname": "Gerrit",
"projectList": [
{
"id": 1,
"name": "DFBnet",
"person": [
{
"id": 1,
"nachname": "Kämpfer",
"vorname": "Gerrit",
"projectList": [
{
"id": 1,
"name": "DFBnet",
"person": [
{
"id": 1,
"nachname": "Kämpfer",
"vorname": "Gerrit",
"projectList": [
{
...
Персона Класс:
package com.example.api.model;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import java.lang.reflect.Array;
import java.util.*;
@Entity
@Table(name = "person")
public class Person {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@NotNull
private String nachname;
@NotNull
private String vorname;
@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name = "person_project",
joinColumns = @JoinColumn(name = "person_id", referencedColumnName = "id"),
inverseJoinColumns = @JoinColumn(name = "project_id", referencedColumnName = "id"))
private List<Project> projectList;
public Person(){}
public Person(String nachname, String vorname){
this.nachname = nachname;
this. vorname = vorname;
}
public String getNachname() {
return nachname;
}
public void setNachname(String nachname) {
this.nachname = nachname;
}
public String getVorname() {
return vorname;
}
public void setVorname(String vorname) {
this.vorname = vorname;
}
public void setId(Long id) {
this.id = id;
}
public Long getId() {
return id;
}
public List<Project> getProjectList() {
return projectList;
}
public void setProjectList(List<Project> projectList) {
this.projectList = projectList;
}
}
Класс проекта:
package com.example.api.model;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
@Entity
@Table(name = "project")
public class Project {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@NotNull
private String name;
@ManyToMany(mappedBy = "projectList")
private List<Person> person;
public Project(){}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<Person> getPerson() {
return person;
}
public void setPerson(List<Person> person) {
this.person = person;
}
}
PersonController:
package com.example.api.controller;
import com.example.api.model.Person;
import com.example.api.model.Project;
import com.example.api.repository.ProjectRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import com.example.api.repository.PersonRepository;
import java.util.List;
import java.util.Optional;
@RestController
public class PersonController {
@Autowired
PersonRepository personRepo;
@Autowired
ProjectRepository projectRepo;
@GetMapping("/person")
public List<Person> getPerson(){
return (List<Person>) personRepo.findAll();
}
@PostMapping("/person")
public Person addPerson(@RequestBody Person newPerson){
return personRepo.save(newPerson);
}
@PutMapping("/person/{id}")
public Person replacePerson(@RequestBody Person newPerson, @PathVariable Long id){
return personRepo.findById(id)
.map(person -> {
person.setVorname(newPerson.getVorname());
person.setNachname(newPerson.getNachname());
return personRepo.save(person);
})
.orElseGet(() -> {
newPerson.setId(id);
return personRepo.save(newPerson);
});
}
@GetMapping("/person/{id}")
public Optional<Person> findPersonById(@PathVariable Long id){
return personRepo.findById(id);
}
@PostMapping("person/{id}/projects")
public Optional<Person> addProject(@RequestBody List<Project> projectList, @PathVariable Long id){
return personRepo.findById(id)
.map(person -> {
person.setProjectList(projectList);
return personRepo.save(person);
});
}
}
Контроллер проекта:
package com.example.api.controller;
import com.example.api.model.Project;
import com.example.api.repository.ProjectRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Optional;
@RestController
public class ProjectController {
@Autowired
ProjectRepository projectRepo;
@GetMapping("/project")
public List<Project> getProjects(){
return projectRepo.findAll();
}
@PostMapping("/project")
public Project addProject(@RequestBody Project newProject){
return projectRepo.save(newProject);
}
@GetMapping("/project/{id}")
public Optional<Project> findProjectById(@PathVariable Long id){return projectRepo.findById(id);}
}
PersonRepositrory:
package com.example.api.repository;
import com.example.api.model.Person;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.Optional;
public interface PersonRepository extends JpaRepository<Person, Long> {
Optional<Person> findById(Long Id);
}
ProjectRepository:
package com.example.api.repository;
import com.example.api.model.Person;
import com.example.api.model.Project;
import org.springframework.data.domain.Sort;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List;
import java.util.Optional;
public interface ProjectRepository extends JpaRepository<Project, Long> {
}