所以我有这个模型:
@JsonIgnoreProperties(ignoreUnknown = true)
@Entity
public class OrderResponse {
@Id
private int id;
private String referenceNumber;
private String createdDate;
private String modifiedDate;
private double totalPrice;
@Embedded
private CollectionResponse lines;
并且:
@JsonIgnoreProperties(ignoreUnknown = true)
@Embeddable
public class CollectionResponse {
@OneToMany(cascade = CascadeType.ALL)
private Collection<OrderLineResponse> items;
基本上,CollectionRespone类只是一个OrderResponse到许多OrderLineResponses的映射。我从JSON格式的外部API中获得了这种关系,并且在可能的情况下,我希望避免弄乱输入格式,因此这就是为什么我不直接将其从OrderResponse映射到OrderLineResponse。
当前设置可以正常工作,并生成并填充正确的表。一个用于订单响应的表,一个用于OrdeLineResponses的表和一个关系表。事实就是,由于某种原因,在我的方法的第一次调用中不会填充关系表,应该将其保存到其中,但始终在后续调用中填充。
我的方法看起来像这样。
public void addOrdersFromTo(String from, String to, int offset) throws Exception {
MultiValueMap<String, String> params = new LinkedMultiValueMap<String, String>();
params.add("start", from);
params.add("end", to);
params.add("include", "lines");
params.add("offset", Integer.toString(offset));
URI url = buildUrl("/admin/WEBAPI/v2/orders", params, uriComponentsBuilder);
JsonNode jsonNode = restTemplate.getForObject(url, JsonNode.class);
ObjectMapper jsonObjectMapper = new ObjectMapper();
Collection<OrderResponse> orderResponses = Arrays.asList(jsonObjectMapper.treeToValue(jsonNode.get("items"), OrderResponse[].class));
orderResponseRepository.saveAll(orderResponses);
编辑: 这是我的OrderLineResponse实体,没有getter和setter。
@JsonIgnoreProperties(ignoreUnknown = true)
@Entity
public class OrderLineResponse {
@Id
private int id;
private String productNumber;
private String productName;
private int quantity;
private double unitPrice;
private double totalPrice;
public OrderLineResponse() {
}
public OrderLineResponse(int id, String productNumber, String
productName, int quantity, double unitPrice, double totalPrice) {
this.id = id;
this.productNumber = productNumber;
this.productName = productName;
this.quantity = quantity;
this.unitPrice = unitPrice;
this.totalPrice = totalPrice;
}