Я получил объект B, связанный с помощью ManyToOne с другим объектом A. При записи метода add в его контроллере я, очевидно, передаю поле Экземпляра A в качестве параметра, из которого я выбираю весь объект, чтобы извлечь его ID, который я использовать в качестве ключа для отношений.
Если экземпляр A, который я пытаюсь выбрать, не существует, я хочу, чтобы он был создан (поле, которое я передаю в качестве параметра, достаточно для его конструктора).
Могу ли я сделать это без создания экземпляра контроллера A внутри контроллера B? Кажется странным ...
UPDATE
Я переписал большую часть своего проекта, благодаря подсказкам @Artur Vakhrameev
Я создал сервис для каждой сущности и создал одну из них внутри другой. Это услуга для сущности отношений "многие стороны"
@Transactional
@Service
public class LineaService {
@Autowired
private LineaRepository lineaRepo;
@Autowired
private MarcaService marcaService;
public Linea create(Linea linea) {
Linea nuovaLinea = new Linea();
nuovaLinea.setNome(linea.getNome());
if (marcaService.findByName(linea.getMarca().getNome()) == null)
nuovaLinea.setMarca(marcaService.create(linea.getMarca()));
else
nuovaLinea.setMarca(linea.getMarca());
lineaRepo.save(nuovaLinea);
nuovaLinea.getMarca().addLinea(nuovaLinea);
return nuovaLinea;
}
И теперь это простое add
пост-отображение в моем контроллере, лишенное всей бизнес-логики
@PostMapping("/add")
public String aggiungiLinea(Linea linea) {
lineaService.create(linea);
return "redirect:list";
}
ОБНОВЛЕНИЕ 2 (этот, кажется, работает как ожидалось)
public Linea create(Linea linea) {
Marca marcaAssociata = marcaService.findByName(linea.getMarca().getNome());
if (marcaAssociata == null)
linea.setMarca(marcaService.create(linea.getMarca()));
else
linea.setMarca(marcaAssociata);
return lineaRepo.save(linea);
}