当前位置: 首页 > 知识库问答 >
问题:

如何使用外键发布新产品以添加具有category\u id、Angular和SpringBoot的产品

鲜于煜祺
2023-03-14

我有两个实体产品和类别(多对一)关系。我想添加一个新产品,但总是失败。

控制台和邮递员中均出现错误:原因:{原因:{…},消息:'无法执行语句'}消息:'无法执行语句;SQL[不适用];约束[空];嵌套异常为org.hibernate.exception.ConstraintViolationException:

任何帮助请!!

产品ts

export class Product {
  public id: number;
  public description;
  public name: string;
  public unitPrice: number;
  public materiaux: string;
  public categoryId:number;}

**ProductCategory.ts**

export class ProductCategory {
  public id:number;
  public categoryName:string;
}

catalogue.service.ts:发布方法

public postData(value)  {
    return this.httpClient.post(this.host+"products",value);
  }

新产品。组成部分ts

import { Component, OnInit } from '@angular/core';
import {CatalogueService} from "../services/catalogue.service";
import {Router} from "@angular/router";
import {Product} from "../model/product.model";

@Component({
  selector: 'app-new-product',
  templateUrl: './new-product.component.html',
  styleUrls: ['./new-product.component.css']
})
export class NewProductComponent implements OnInit {
  ProductCategories: any;
  products:any;
  size:number=5;
  currentPage:number=0
  totalPages:number=0
  pages:Array<number>;
  ProductCategory:any;

  private  currentProduct:any;
  constructor(private service:CatalogueService, private router:Router) { }

  ngOnInit() {
    this.onGetProducts();
    this.service.findAllCategory().subscribe(data =>{
      this.ProductCategories=data ;
    },error=>{
      console.log(error);
    })
  }
  saveProduct(value) {

    this.service.findCategory(value.category).subscribe(data=>{
      this.ProductCategory = data;
      console.log(data);
    });
    value = {
      "name": value.name,
      "quantity":value.quantity,
      "unitPrice":value.unitPrice,
      "materiaux":value.materiaux,
      "category": this.ProductCategory,

    }
    this.service.postData(value).subscribe(d =>{
      this.currentProduct =  d;
    return this.router.navigateByUrl("/new-product");
    });
  }
  }

新产品。html

<div class="card">
    <div class="card-body">
        <form #f="ngForm" (ngSubmit)="saveProduct(f.value)">
        <div class="form-group">
              <label for="name">Designation</label>
              <input ngModel placeholder="Designation" type="text" name="name" id="name" class="form-control">
            </div>
            
          <div class="form-group">
            <label for="unitPrice">Prix</label>
            <input ngModel placeholder="Price" type="number" name="unitPrice" id="unitPrice" class="form-control">
          </div>
          <div class="form-group">
            <label for="quantity">Quantite</label>
            <input ngModel placeholder="Quantite" type="number" name="quantity" id="quantity" class="form-control">
          </div>
         
          <div class="form-group">
            <label for="materiaux">Materiaux du  produit </label>
            <select class="form-control" ngModel  name="materiaux" id="materiaux">
              <option value="">----------</option>
              <option  value="Gold">Gold</option>
              <option  value="Diamond">Diamond</option>
              <option  value="Silver">Silver</option>
            </select>
          </div>
          <div class="form-group">
            <label for="category">Categorie du produit </label>
            <select *ngIf="ProductCategories"  class="form-control" ngModel  name="category" id="category">
              <option value="">----------</option>
              <option *ngFor="let c of ProductCategories._embedded.productCategories" value="{{c.id}}">{{c.categoryName}}</option>
            </select>
          </div>
          <button class="btn btn-sm btn-primary">Ajouter</button>
        </form>
      </div>
  </div>

产品Java语言

@Entity
@Table(name="product")
@Data
public class Product {

 @Id
 @GeneratedValue(strategy = GenerationType.IDENTITY)
 @Column(name = "id")
 private Long id;

 @ManyToOne
 @JoinColumn(name = "category_id", nullable = false)
 private ProductCategory category;



 @Column(name = "sku")
 private String sku;

 @Column(name = "materiaux")
 private String materiaux;

[and other Attributes.............]

ProductCategory产品类别

@Table(name="product_category")
// @Data -- known bug
@Getter
@Setter
public class ProductCategory {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private Long id;

    @Column(name = "category_name")
    private String categoryName;

    @JsonManagedReference
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "category")
    private Set<Product> products;

}

共有1个答案

元俊雅
2023-03-14

创建新产品时,您需要指定类别ID。

 类似资料:
  • 我需要在我的表中添加一个新产品。这http://localhost:8080/product/create/在Postman上工作。当我发布并添加新产品时,它会返回id并自动将其添加到我的表中。我的问题是如何在角CLI上实现它。我不知道我该怎么做。有人能帮我吗?这是我的代码: 产品Controller.java 应用程序。组成部分ts 产品服务ts app.component.html

  • 我正在使用此代码添加自定义属性 这个代码的结果我得到了添加只是产品属性名称没有术语值... 我找了很多,但没有得到任何答案。

  • 编辑问题以包括所需的行为、特定问题或错误以及重现问题所需的最短代码。这将有助于其他人回答这个问题。 这是我的日志 法典:

  • 我试图做一些事情,比如:Woocommerce更新签出ajax!我正在为我的客户构建一个多步骤表单,其中客户正在使用ajax将产品添加到购物车中。当产品添加到购物车中时,我需要更新收银台。我尝试执行onclick功能,因此当用户在购物车中添加产品时,签出步骤将更新,而不刷新页面: 但它不起作用,我觉得我错过了一些明显的东西......任何提示?:)

  • Step7. 产品发布 概述 发布产品 特别说明 Step7. 产品发布 更新时间:2018-02-05 22:37:19 概述 发布产品意味着这款产品完成了开发,已经准备好可以进入到量产和规模化部署的阶段。因此,请确保产品的相关功能已经创建完成,产品发布后,您将无法再: 编辑产品的信息; 删除产品; 编辑产品的功能定义; 编辑产品的扩展信息; 对于透传类产品,无法再次编辑或提交脚本; 重新生成M

  • 我发现所有产品的数量不等于< code>home类别中的产品数量。这是因为在添加产品时,并不总是选择最大的父类别。因此,有些产品属于< code>home,而有些则不属于。 虽然我需要为类别<code>主页<code>页面显示正确数量的产品,但我在数据库中查找了包含类别的列,但在<code>ps_product</code>或<code>ps_product_lang</code>中未找到它们。