Недавно я начал изучать java и весеннюю загрузку, поэтому я решил создать основную c прототип сервисной системы. Но у меня возникают некоторые проблемы с постоянным обновлением, там есть ссылки oneToMany или manyToMany.
Я создал таблицу " service_order ", " services " и " service_order_services"(сводная таблица, определяющая связь между service_order и сервисами). Таким образом, мои объекты базы данных выглядят так:
service_orders .id> service_order_services .service_order_id
service .id > service_order_services .service_id
Я уже извлекаю из запроса get этот relashion из базы данных (при вставке вручную), но когда я пытаюсь сохранить эту информацию, ни одна строка не создается .. .
Мой запрос на создание заказа на обслуживание выглядит следующим образом:
{
"status": { "id" : 1 },
"title": "Manutenção de compressor de ar",
"address": "Rua São João do Rio preto",
"dateSchedule": "2020-07-12T13:30:30+05:00",
"contactName": "Pedro Rocha",
"contactPhone": "11 6670-2132",
"contactEmail": "pedro@fakenterprize.com",
"details": "Manutenção preventiva no compressor de ar modelo RPX921 Série 4. Notas: Levar produtos para limpeza de peças.",
"services": [{ "service_id": 1 }]
}
Мое действие в контроллере SO:
@PostMapping(value = "", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<String> create(@Valid @RequestBody ServiceOrder serviceOrder) throws JsonProcessingException {
ObjectMapper mapper = new ObjectMapper();
this.repository.save(serviceOrder);
String json = mapper.writeValueAsString(serviceOrder);
return ResponseEntity.ok(json);
}
SO Entity:
@Entity
@Table(name = "service_orders")
public class ServiceOrder {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@OneToMany( mappedBy = "serviceOrder" )
@JsonManagedReference
private Set<ServiceOrderService> services;
public Set<ServiceOrderService> getServices() {
return services;
}
public void setServices(Set<ServiceOrderService> services) {
this.services = services;
}
//... (Other properties)
}
Сервисный заказ Сервисный объект:
@Entity
@Table(name = "service_order_services")
public class ServiceOrderService {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@OneToOne
@JoinColumn(name = "service_order_id", referencedColumnName = "id")
@JsonBackReference
private ServiceOrder serviceOrder;
@OneToOne
@JoinColumn(name = "service_id", referencedColumnName = "id")
private Service service;
public ServiceOrder getServiceOrder() {
return serviceOrder;
}
public void setServiceOrder(ServiceOrder serviceOrder) {
this.serviceOrder = serviceOrder;
}
public Service getService() {
return service;
}
public void setService(Service service) {
this.service = service;
}
}
Что не так с моим кодом? Необходимо вручную выполнить итерацию и сохранить все строки сервисов заказов на обслуживание в моем контроллере, прежде чем сохранять этот SO или JPA автоматически?