未存储的表之间的关系第一次运行

时间:2018-10-18 18:25:11

标签: mysql spring hibernate jpa

所以我有这个模型:

@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;
    }

0 个答案:

没有答案