【发布时间】:2011-07-22 08:32:30
【问题描述】:
在为买家创建销售订单账单的 Web 应用程序中,我尝试创建数据库表和休眠映射。实体之间的关系是:
Bill 有一个 Buyer 和一个 SaleOrder
SaleOrder 有一个买家。
删除 SaleOrder 时,必须删除关联的 Bill。
我实现了java类,创建了表。
在架构中,表 SALEORDER 有一个 FK 列“BUYER_ID”。 此表没有其他外键列。 表 BILL 有两个外键,BUYER_ID 和 SALEORDER_ID。
我如何使用一对一关系 AND来映射 Bill 和 SaleOrder 以确保在删除 SaleOrder 时,Bill 也会被删除?
我很困惑,因为 由于 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时应该删除Bill)?
希望有人可以提出解决方案。
我的应用程序中的类是:
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);
【问题讨论】: