Проблема при создании таблиц в H2 In Memory при попытке создать двунаправленную связь
У меня есть три таблицы,которые создаются следующим образом:
CREATE TABLE restaurant_schema.dishes
(
dish_id BIGINT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(64) NOT NULL,
price NUMERIC(7, 2) NOT NULL,
weight INT NOT NULL,
recipe_id BIGINT REFERENCES warehouse_schema.recipes (id),
description VARCHAR(256),
category_id BIGINT REFERENCES restaurant_schema.categories (id)
);
CREATE TABLE delivery_schema.order_item
(
id LONG,
order_id BIGINT REFERENCES delivery_schema.dish_orders (id),
dish_id BIGINT REFERENCES restaurant_schema.dishes (dish_id),
quantity INTEGER NOT NULL
);
CREATE TABLE delivery_schema.dish_orders
(
id BIGINT AUTO_INCREMENT PRIMARY KEY,
order_item_id BIGINT NOT NULL REFERENCES delivery_schema.order_item (id),
order_time TIMESTAMP NOT NULL
);
Когда я пытаюсь стартануть то получаю ошибку:
SQL State : 42S02
Error Code : 42102
Message : Таблица "dish_orders" не найдена
Очевидно что order_item пытается сослаться на dish_order,но такой таблицы еще не существует. Однако по моей бизнес логике мне необходима двунаправленная связь,как можно выйти из ситуации?
P.S Менять порядок создания таблиц пробовал
Ответы (1 шт):
Автор решения: Михаил Ребров
→ Ссылка
Все просто:
- Создай таблицу
order_itemБЕЗ поля(order_id) ссылающегося на несуществующую таблицуdish_orders. - Создай недостающую таблицу
dish_orders - И после всего этого спокойно добавляй недостающее поле
order_id, ссылающееся на уже существующую таблицуdish_orders
Таблицы у нас модифицируются с помощью ALTER TABLE
ALTER TABLE delivery_schema.order_item
ADD COLUMN order_id BIGINT REFERENCES delivery_schema.dish_orders (id);
Все вместе выглядеть будет вот так:
CREATE TABLE restaurant_schema.dishes
(
dish_id BIGINT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(64) NOT NULL,
price NUMERIC(7, 2) NOT NULL,
weight INT NOT NULL,
recipe_id BIGINT REFERENCES warehouse_schema.recipes (id),
description VARCHAR(256),
category_id BIGINT REFERENCES restaurant_schema.categories (id)
);
CREATE TABLE delivery_schema.order_item
(
id LONG,
dish_id BIGINT REFERENCES restaurant_schema.dishes (dish_id),
quantity INTEGER NOT NULL
);
CREATE TABLE delivery_schema.dish_orders
(
id BIGINT AUTO_INCREMENT PRIMARY KEY,
order_item_id BIGINT NOT NULL REFERENCES delivery_schema.order_item (id),
order_time TIMESTAMP NOT NULL
);
ALTER TABLE delivery_schema.order_item
ADD COLUMN order_id BIGINT REFERENCES delivery_schema.dish_orders (id);
Также есть второй вариант:
- Сначала создай нужные таблицы, но без внешних ключей.
- Потом на готовой структуре добавь внешние ключи