Многие ко многим используют составной ключ: как добавить элементы в таблицу между сущностями? - PullRequest
0 голосов
/ 23 марта 2020

Итак, я следовал этому уроку 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);

1 Ответ

0 голосов
/ 23 марта 2020

ОК, я сделал это. Я скучал по репозиторию для различных BrandStock, а также был осторожен с порядком, в котором все создано.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...