Создание основных и подробных записей с внешними ключами - PullRequest
0 голосов
/ 05 октября 2018

Провел много исследований по созданию основных и подробных записей с внешними ключами в подробных записях, но не смог найти правильный пример / информацию для меня, чтобы лучше понять, как создавать такие записи.У меня есть угловая форма, которая имеет заголовок (заказ клиента) и детали (поставки).Я обрабатываю все в памяти до тех пор, пока не будет нажата кнопка «Сохранить», после чего мне нужно создать запись в таблице customerorder и для каждой поставки (может иметь более одной) создать записи накладной в таблице deliverynotes в базе данных.Таблица доставок имеет отношение к заказу клиента через внешний ключ.

Чтобы создать записи, нажмите «Сохранить»;

console.log('BEFORE custOrder');
this._custOrderService.createCustomerOrder(this.custOrder).subscribe((custOrderSubs) => {
  // this.orderform.reset();
  // Set order reference to the delivery notes created.
  console.log('IN custOrder');
  const ordPK = Number(custOrderSubs.delOrdRef);
  this.custOrder.delOrdRef = ordPK;
  console.log('Ord Num: ' + this.custOrder.delOrdRef);
}, (errorcustord) => {
  console.log(errorcustord);
});
console.log('AFTER custOrder');

console.log('BEFORE delNote');
this.delnotearray.forEach(element => {
  console.log('IN delNote');
  const delnotestring = '{"delNote": ' + JSON.stringify(element) + ',' + '"delOrder": ' + JSON.stringify(this.custOrder) + '}';
  // this._delNotesService.createDelNote(element, this.custOrder).subscribe((delNoteSubs) => {
  this._delNotesService.createDelNote(delnotestring).subscribe((delNoteSubs) => {

  }, (errordelnotes) => {
    console.log(errordelnotes);
  });

});
console.log('AFTER delNote');

У меня есть две отдельные угловые услуги: одна для заказов клиентов, а другая дляПримечания по доставке Операции CRUD.

На внутренней стороне у меня есть служба Java REST, использующая Spring Boot и Hibernate - часть контроллера;

@PostMapping("/delnote")
    public DeliveryNote createDelNote(@RequestBody String jsonString) {
        DeliveryNote deliveryNote = new DeliveryNote();
        DeliveryOrder deliveryOrder = new DeliveryOrder();
        // System.out.println("args =>" + jsonString.toString());   
        try{
            JSONParser parser = new JSONParser();
            JSONObject json = (JSONObject) parser.parse(jsonString);    
            JSONObject jsonDel = (JSONObject) json.get("delNote");          
            deliveryNote.setDeliveryInstructions(jsonDel.get("deliveryInstructions").toString());
            System.out.println("json.simple:" + jsonDel.get("DelOrdRef"));

            JSONObject jsonOrd = (JSONObject) json.get("delOrder");
            deliveryOrder.setDelOrdRef((Long)jsonOrd.get("DelOrdRef"));         

            deliveryNote.setDelOrdRef(deliveryOrder);

        } catch(ParseException pe){

             System.out.println("position: " + pe.getPosition());
             System.out.println(pe);
          }     

        return deliveryNoteRepository.save(deliveryNote);

    }   

Я пробовал различные способы использования JSONправильно и использовать соответствующие объекты, а не приведенные выше строки и манипуляции со строками, но пока безуспешно.

Приведенный выше подход также создает другую проблему;службы angular (будучи наблюдаемыми) пытаются создать накладные до создания заказа клиента, что, конечно, является проблемой (проблема целостности ссылок), и возвращают внутреннюю ошибку сервера.

Я новичок в спящем режимеи я уверен, что в моем подходе есть недостаток, который в результате привел меня к созданию таких «осложнений», которые даже не доставляют мне удовольствия.

Можете ли вы помочь мне, как такойДобавления (и обновления) родительских / дочерних записей обычно выполняются с использованием технологий, о которых я говорил?

Спасибо

--- update

Решено!Изменены различные компоненты для отражения правильной передачи JSON и выявлена ​​проблема с проблемой внешнего ключа, которая была связана с DelOrdRef в классе DelNote, не установленном в класс CustomerOrder;

import { CustomerOrder } from './customerorder';
export class DelNote {
    delNoteRef: number;
    delNoteDate: Date;
    delOrdRef: CustomerOrder;
...