У меня есть два класса моделей, два репозитория, два сервисных и два контроллера, как показано ниже.
public class ABC {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
Long id;
@Column(name = "abcField1")
String abcField1;
@NotNull
@Email
@Column(name = "abcField2")
String abcField2;
//getter and setters
}
public class XYZ {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
Long id;
@NotNull
@Column(name = "xyzField1")
String xyzField1;
@NotNull
@Column(name = "xyzField2")
String xyzField2;
@ManyToOne(cascade=CascadeType.PERSIST)
@JoinColumn(name = "abc_id", referencedColumnName = "id")
ABC abc;
//getter and setters
}
@RestResource(exported = false)
public interface ABCRepository extends CrudRepository<ABC, Long> {
}
@RestResource(exported = false)
public interface XYZRepository extends CrudRepository<XYZ, Long> {
}
@Service
public class XYZService {
@Autowired
XYZRepository xyzRepository;
public XYZ save(XYZ x) {
return xyzRepository.save(x);
}
}
@Service
public class ABCService {
@Autowired
ABCRepository abcRepository;
public ABC save(ABC a) {
return abcRepository.save(a);
}
}
public class ABCController {
@Autowired
ABCService abcService;
@PostMapping(path = "/abc/save")
public ResponseEntity<ABC> register(@RequestBody ABC a) {
return ResponseEntity.ok(abcService.save(a));
}
}
public class XYZController {
@Autowired
XYZService xyzService;
@PostMapping(path = "/xyz/save")
public ResponseEntity<XYZ> register(@RequestBody XYZ x) {
return ResponseEntity.ok(xyzService.save(x));
}
}
Проблема в том, что когда я пытаюсь сохранить ниже JSON, он собирается вставлять строку в таблицу ABC каждыйвремя.
{
"xyzField1": "XYZ1",
"xyzField2": "XYZ2",
"abc":{
"abcField1": "ABC1",
"abcField2": "ABC2",
.
.
},
.
.
}
И я хочу обновлять строку таблицы ABC вместо добавления каждый раз, поэтому, когда я передаю поле идентификатора ниже json, как показано ниже, тогда я сталкиваюсь с ошибкой "org.springframework.dao.InvalidDataAccessApiUsageException:отсоединённая сущность передана для сохранения "
{
"xyzField1": "XYZ1",
"xyzField2": "XYZ2",
"abc":{
"id" : "1",
"abcField1": "ABC1",
"abcField2": "ABC2",
.
.
},
.
.
}
Я попытался найти решение для этого, и они предлагают, чтобы метод сохранения CrudRepositary автоматически обновлялся, когда мы передаем идентификатор в JSON, но он не работает в моем случае.