Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring boot休眠一对多关系_Java_Spring_Spring Boot_Set_Spring Data - Fatal编程技术网

Java Spring boot休眠一对多关系

Java Spring boot休眠一对多关系,java,spring,spring-boot,set,spring-data,Java,Spring,Spring Boot,Set,Spring Data,我有两个实体产品和产品选项。 产品可以有多个产品选项,如图所示,我已将其映射为oneToMany关系 @Entity public class Product { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) private int id; private String description; private String productCategory; private Strin

我有两个实体产品和产品选项。 产品可以有多个产品选项,如图所示,我已将其映射为oneToMany关系

@Entity
public class Product {

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private int id;
    private String description;
    private String productCategory;
    private String optionDescription;
    private BigDecimal productBasePrice;
    @OneToMany(mappedBy = "product",cascade = CascadeType.ALL)
    private Set<ProductOption>productOptions=new HashSet<>();


    public Product() {}
    public Product(String description, ProductCategory productCategory,String optionDescription, BigDecimal productBasePrice) {
        super();
        this.description = description;
        this.productCategory=productCategory.toString();
        this.optionDescription = optionDescription;
        this.productBasePrice = productBasePrice;
    }


    public int getId() {
        return id;
    }


    public void setId(int id) {
        this.id = id;
    }


    public String getDescription() {
        return description;
    }


    public String getProductCategory() {
        return productCategory;
    }
    public void setProductCategory(String productCategory) {
        this.productCategory = productCategory;
    }
    public void setDescription(String description) {
        this.description = description;
    }


    public String getOptionDescription() {
        return optionDescription;
    }


    public void setOptionDescription(String optionDescription) {
        this.optionDescription = optionDescription;
    }


    public BigDecimal getProductBasePrice() {
        return productBasePrice;
    }


    public void setProductBasePrice(BigDecimal productBasePrice) {
        this.productBasePrice = productBasePrice;
    }


    public Set<ProductOption> getProductOptions() {
        return productOptions;
    }


    public void setProductOptions(Set<ProductOption> productOptions) {
        this.productOptions = productOptions;
    }


}
这就是我初始化数据的方式

@Component
public class WebsiteBootstrap implements ApplicationListener<ContextRefreshedEvent>{


    private ProductRepository productRepository;


    @Override
    public void onApplicationEvent(ContextRefreshedEvent arg0) {
        initProducts();
    }

    public WebsiteBootstrap( ProductRepository productRepository,
            ProductOptionRepository productOptionRepository) {
        this.productRepository=productRepository;
    }



    private void initProducts() {
        ProductOption productOpton1=new ProductOption("mit Cocktailsauce", new BigDecimal(0), null, null, null, null);

        ProductOption productOpton2=new ProductOption("mit Joghurtsauce", new BigDecimal(0), null, null, null, null);
        ProductOption productOpton3=new ProductOption("ohne Sauce", new BigDecimal(0), null, null, null, null);


        Product product37= new Product("Falafel", ProductCategory.Vegatarische_Döner, "Wahl aus: mit Cocktailsauce, mit Joghurtsauce oder ohne Sauce.",  new BigDecimal(5.00));

        product37.getProductOptions().add(productOpton1);
        product37.getProductOptions().add(productOpton2);
        product37.getProductOptions().add(productOpton3);


            this.productRepository.save(product37);


    }
在数据库中,我无法找到产品id

映射中缺少了什么?

ProductOptions在您的例子中是子实体,它包含带有外键的列,因此负责保存关系。您必须在子端保存实体:

private void initProducts() {
    ProductOption productOpton1=new ProductOption("mit Cocktailsauce", new BigDecimal(0), null, null, null, null);
    ProductOption productOpton2=new ProductOption("mit Joghurtsauce", new BigDecimal(0), null, null, null, null);
    ProductOption productOpton3=new ProductOption("ohne Sauce", new BigDecimal(0), null, null, null, null);

    Product product37= new Product("Falafel", ProductCategory.Vegatarische_Döner, "Wahl aus: mit Cocktailsauce, mit Joghurtsauce oder ohne Sauce.",  new BigDecimal(5.00));

    product37.getProductOptions().add(productOpton1);
    product37.getProductOptions().add(productOpton2);
    product37.getProductOptions().add(productOpton3);

    productOpton1.setProduct(product37);
    productOpton2.setProduct(product37);
    productOpton3.setProduct(product37);

    this.productRepository.save(product37);
}

删除@JoinColumn,它将被自动推断。此外,还应该映射关系的两端。您正在创建一个没有产品的ProductOption,ProductOption负责映射关系。因此,您应该在ProductOption上调用setProduct,并将其添加到productOptions列表中。@M.Deinum您能帮我解决我在多个映射中面临的另一个问题吗?
private void initProducts() {
    ProductOption productOpton1=new ProductOption("mit Cocktailsauce", new BigDecimal(0), null, null, null, null);
    ProductOption productOpton2=new ProductOption("mit Joghurtsauce", new BigDecimal(0), null, null, null, null);
    ProductOption productOpton3=new ProductOption("ohne Sauce", new BigDecimal(0), null, null, null, null);

    Product product37= new Product("Falafel", ProductCategory.Vegatarische_Döner, "Wahl aus: mit Cocktailsauce, mit Joghurtsauce oder ohne Sauce.",  new BigDecimal(5.00));

    product37.getProductOptions().add(productOpton1);
    product37.getProductOptions().add(productOpton2);
    product37.getProductOptions().add(productOpton3);

    productOpton1.setProduct(product37);
    productOpton2.setProduct(product37);
    productOpton3.setProduct(product37);

    this.productRepository.save(product37);
}