【发布时间】:2020-04-26 22:23:05
【问题描述】:
最近开始学习java和spring boot,所以决定做一个基本的原型服务系统。但是我在坚持 relashionship 时遇到了一些问题,其中包含 oneToMany 或 manyToMany 引用。
我创建了表“service_order”、“services”和“service_order_services”(在 service_order 和服务)。所以我的数据库实体看起来像这样:
service_orders.id > service_order_services.service_order_id
服务.id > service_order_services.service_id
我已经从数据库中获取了这个 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
@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 自动执行此操作?
【问题讨论】:
标签: java spring-boot jpa spring-data-jpa spring-rest