У меня есть приложение с весенней загрузкой с базой данных MySql. У меня есть отношение «многие ко многим» между столом для пиццы и столом для начинки, поэтому я создал дополнительную таблицу, в которой я сохраняю эти отношения. Столы:

CREATE TABLE topping (
    id SERIAL PRIMARY KEY,
    topping_name VARCHAR(64) NOT NULL,
    price INT NOT NULL,
    spicy bool NOT NULL
);

CREATE TABLE pizza (
    id SERIAL PRIMARY KEY,
    pizza_name VARCHAR(64) NOT NULL
);

CREATE TABLE pizza_with_topping (
    pizza_id BIGINT UNSIGNED NOT NULL,
    topping_id BIGINT UNSIGNED NOT NULL,
    CONSTRAINT pizza_with_topping_ibfk_1
    FOREIGN KEY(pizza_id)
        REFERENCES pizza(id),
    CONSTRAINT pizza_with_topping_ibfk_2
    FOREIGN KEY(topping_id)
        REFERENCES topping(id)
);

В весенней загрузке я обнаружил, что мне нужно расширить интерфейс CrudRepository, и я могу вызвать из него метод findAll (), чтобы получить содержимое таблицы. Во время работы я получаю содержимое всех трех таблиц примерно так:

Iterable<Pizza> pizzasInDb = pizzaRepository.findAll();
Iterable<Topping> toppingsInDb = toppingRepository.findAll();
Iterable<PizzaWithTopping> pizzaToppingConnectionTable = pizzaWithToppingRepository.findAll();

После этого на основе этих трех таблиц я вручную создаю объекты, которые содержат как название пиццы, так и ее начинку. Поскольку я установил внешние ключи в таблице pizza_with_topping, мне было интересно, есть ли лучший способ получить эту модель? Может быть, с помощью вызова встроенных функций, которые автоматически делают этот объект модели для меня на основе внешние ключи.

0
66Gramms 27 Ноя 2021 в 15:56

1 ответ

Лучший ответ

Да, есть. Вы можете смоделировать свой домен с помощью отношений «многие ко многим», используя JPA. Если вы используете аннотацию, эта камера может быть достигнута с помощью @ManyToMany Пример здесь

1
Liviu Stirb 27 Ноя 2021 в 15:59
Спасибо, удалось подключить на примере :)
 – 
66Gramms
27 Ноя 2021 в 16:30