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