使用外键创建主记录和明细记录

时间:2018-10-05 12:05:12

标签: java json angular hibernate spring-boot

对于在明细记录中使用外键创建主记录和明细记录进行了大量研究,但未能为我找到正确的示例/信息,从而无法更好地理解如何创建此类记录。 我有一个有标题(客户订单)和详细信息(交货)的角形。 我正在处理内存中的所有内容,直到单击“保存”按钮为止,这时我应该在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操作。

在后端,我有一个使用Spring Boot和Hibernate的Java REST服务-控制器的一部分;

@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和使用相应的对象,而不是上面的字符串和字符串操作,但到目前为止没有成功。

以上方法也造成了另一个问题;角度服务(可观察到的)正在尝试在创建客户订单之前创建交货单,这当然是一个问题(参照完整性问题)并返回服务器内部错误。

我刚冬眠,我确信它们是我的方法中的一个缺陷,结果导致我创造了这种“并发症”,而我本来不想让这种并发症出现。

您能帮我一个这样的父母/孩子如何记录使用我所指称的技术正常进行的添加(和更新)吗?

谢谢

---更新

解决了!更改了各个组件以反映正确的JSON传输,并确定了与外键问题有关的问题,该问题与未设置为CustomerOrder类的DelNote类中的DelOrdRef有关;

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

0 个答案:

没有答案