У меня есть отношения самосоединения, изображающие отношения Сотрудника и менеджера в моем коде JPA данных весны и раскрывающие его через конечную точку REST.
Вот мой EmployeeController
@Controller
@RequestMapping(path = "/employee")
public class EmployeeController {
@Autowired
private EmployeeRepository employeeRepository;
@PostMapping
public Employee addNewUser(@RequestBody Employee employee) {
return employeeRepository.save(employee);
}
@GetMapping
public @ResponseBody Iterable<Employee> getAllUsers() {
// This returns a JSON or XML with the users
return employeeRepository.findAll();
}
}
ВотСущность сотрудника
@Entity
@Table(name = "EMPLOYEE")
public class Employee {
@Id
@Column(name = "id")
@GeneratedValue
private Long id;
@Column(name = "fname")
private String fname;
@Column(name = "lname")
private String lname;
@ManyToOne(cascade = { CascadeType.ALL })
@JoinColumn(name = "manager_id")
private Employee manager;
@OneToMany(mappedBy = "manager")
private Set<Employee> subordinates = new HashSet<Employee>();
//getters and setters
}
Теперь, когда я отправляю POST
Запрос конечной точке /employee
с показателем ниже
POST /employee
{
"fname":"akash",
"lname":"xavier",
"manager":{
"fname":"kiran",
"lname":"Kumar"
}
}
, он создает строки, как и ожидалось в базе данных
mysql> select * from employee;
+----+----------+---------+------------+
| id | fname | lname | manager_id |
+----+----------+---------+------------+
| 20 | kiran | Kumar | NULL |
| 19 | akash | xavier | 20 |
+----+----------+---------+------------+
Теперь проблема в том, что я хотел под запросом подать
POST /employee
{
"fname":"Vipul",
"lname":"Kumar",
"manager":{
"fname":"kiran",
"lname":"Kumar"
}
}
, но не хочу, чтобы менеджер Kiran Kumar
снова создавался.