Провел много исследований по созданию основных и подробных записей с внешними ключами в подробных записях, но не смог найти правильный пример / информацию для меня, чтобы лучше понять, как создавать такие записи.У меня есть угловая форма, которая имеет заголовок (заказ клиента) и детали (поставки).Я обрабатываю все в памяти до тех пор, пока не будет нажата кнопка «Сохранить», после чего мне нужно создать запись в таблице 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;