Итак, у меня есть эта модель:
@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.Я получаю это отношение от внешнего API в формате JSON, и я хотел бы, по возможности, избежать путаницы с форматом ввода, поэтому я не просто отображаю его напрямую из 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, без методов получения и установки.
@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;
}