В веб-приложении, которое создает для покупателя Билл для SaleOrder, я пытался создать таблицы базы данных и отображения гибернации. Отношения между сущностями:
У Билла есть Покупатель и Заказ на продажу
У SaleOrder есть Покупатель.
При удалении SaleOrder соответствующий счет должен быть удален.
Я реализовал Java-классы, создал таблицы.
В схеме таблица SALEORDER имеет столбец FK 'BUYER_ID'.
Эта таблица не имеет других столбцов внешнего ключа.
Таблица BILL имеет два внешних ключа: BUYER_ID и SALEORDER_ID.
Как сопоставить Билл и SaleOrder, используя отношение один к одному И , чтобы убедиться, что при удалении SaleOrder Билл также удаляется?
Я в замешательстве, потому что, , поскольку в таблице SaleOrder нет внешнего ключа с именем INVOICE_ID, как я могу отобразить следующее в SaleOrder.hbm.xml?
<!-- 1-to-1 modelled using n-to-n + unique -->
<many-to-one name="invoice" class="Invoice" column="INVOICE_ID" cascade="delete" unique="true">
</many-to-one>
Если я добавлю сопоставление только в Bill.hbm.xml, смогу ли я упомянуть каскадное удаление (что должно удалить Билл при удалении SaleOrder)?
Надеюсь, кто-то может предложить решение.
Классы в моем приложении:
class Buyer{
private Long buyerId;
private String name;
...
}
class SaleOrder{
private Long saleOrderId;
...
private Buyer buyer;
...
}
class Bill{
private Long billId;
...
private Buyer buyer;
private SaleOrder saleOrder;
...
}
Схема:
CREATE TABLE BUYER(
BUYER_ID BIGINT NOT NULL PRIMARY KEY IDENTITY,
NAME VARCHAR(100)
);
CREATE TABLE SALEORDER(
SALEORDER_ID BIGINT NOT NULL PRIMARY KEY IDENTITY,
BUYER_ID BIGINT NOT NULL,
);
CREATE TABLE BILL(
BILL_ID BIGINT NOT NULL PRIMARY KEY IDENTITY,
BUYER_ID BIGINT NOT NULL,
SALEORDER_ID BIGINT NOT NULL,
);
ALTER TABLE SALEORDER ADD CONSTRAINT FK_SO_BUYER FOREIGN KEY(BUYER_ID) REFERENCES BUYER(BUYER_ID);
ALTER TABLE BILL ADD CONSTRAINT FK_BILL_BUYER FOREIGN KEY(BUYER_ID) REFERENCES BUYER(BUYER_ID);
ALTER TABLE BILL ADD CONSTRAINT FK_BILL_SO FOREIGN KEY(SALEORDER_ID) REFERENCES SALEORDER(SALEORDER_ID);