使用复合键的许多人:如何在实体之间的表中添加元素?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用复合键的许多人:如何在实体之间的表中添加元素?相关的知识,希望对你有一定的参考价值。

所以我一直在关注本教程https://www.baeldung.com/jpa-many-to-many

我希望不同的VendingMachines为不同种类的品牌拥有不同种类的库存。到目前为止,遵循本教程并打开H2控制台似乎表结构是正确的。但是,我无法管理如何向结合了两个实体的表中添加内容。我的意思是,增加了自动售货机,增加了品牌,但无法增加库存。

我有

@Entity
public class VendingMachine {
    @Id @GeneratedValue Long vendingMachineid;
    String model;
    int maxBrandsAvailable;
    int maxStockperBrand;
    @OneToMany(mappedBy="vendingMachine")
    @JsonIgnore
    private Set<BrandStock> brandstock;
@Entity
public class Brand {

    @Id @GeneratedValue long brandId;
    String name;
    double price;
    @OneToMany(mappedBy = "brand")
    @JsonIgnore
    Set<BrandStock> brandStock;

我也有两个实体的Jpa存储库。

与不同品牌相关的每台自动售货机的存货

@Entity
public
class BrandStock {

    @EmbeddedId
    BrandStockKey id;

    @ManyToOne
    @MapsId("brand_id")
    @JoinColumn(name = "brand_id")
    Brand brand;

    @ManyToOne
    @MapsId("vendingMachine_id")
    @JoinColumn(name = "vendingMachine_id")
    VendingMachine vendingMachine;

    private int stock;

当然还有该表的主键生成器

@Embeddable
class BrandStockKey implements Serializable {

    private static final long serialVersionUID = 1L;

    @Column(name = "brand_id")
    Long brandId;

    @Column(name = "vendingMachine_id")
    Long vendingMachineId;

在CommandLineRunner上,我用来添加元素的方法看起来像这样,`]

    BrandStock cocaColaForModel01 = new BrandStock();
    Set<BrandStock> stockForModel01 = new HashSet<BrandStock>();
    VendingMachine model01=new VendingMachine("Model01", 5, 10,null);
    stockForModel01.add(cocaColaForModel01);
    cocaColaForModel01.setStock(10);
    cocaColaForModel01.setVendingMachine(model01); 
    Brand cocaCola = new Brand("CocaCola", 1.75, stockForModel01);

    model01.setBrandstock(stockForModel01);
    cocaCola.setBrandStock(stockForModel01);

    brandRepository.save(cocaCola);    
    vendingMachineRepository.save(model01);

因此,我一直在关注本教程https://www.baeldung.com/jpa-many-to-many,我希望不同的VendingMachines对于不同种类的品牌拥有不同种类的库存。到目前为止......>

答案

好的,我做到了。我缺少其他BrandStock的存储库,并且在创建所有内容时都非常谨慎。

以上是关于使用复合键的许多人:如何在实体之间的表中添加元素?的主要内容,如果未能解决你的问题,请参考以下文章

使用实体框架将行插入到具有复合键的表中

在一个表中形成复合键的列实际上在另一个表中作为外键写入实体类

Hibernate 对具有复合键的子实体执行错误的插入顺序

MyBatis-Generator生成复合主键的表模型类

学说:具有复合键的实体之间的 ManyToX 关系

数据库概念和操作数据库的命令