用例: 如果产品名称发生更改,则旧发票必须使用其发出发票时的名称。有一个用于对产品进行版本控制的ID_MOD字段,以及一个包含当前变更编号的ACTUAL_MOD字段。 ID和MOD字段存储在发票表中,并且始终链接到相应的产品版本。但是,价格与产品版本无关,因此仅在其中存储ID_PRODUCT字段就足够了。
scripted_metric
例如:
Domain model:
|---------------------|
|Product |
|---------------------|
|id int |
|id_mod int |
|actual_mod int |
|product_name str |
|PK(id, id_mod) |
|---------------------|
如果我愿意获得实际的Orange产品
id id_mod actual_mod product_name
1 1 3 Orange
1 2 3 Orange Spn
1 3 3 Orange from Spain
2 1 2 Wtr melon
2 2 2 Water melon
结果:
select * from product where id = 1 and id_mod = actual_mod
例如:
id id_mod actual_mod product_name
1 3 3 Orange from Spain
|-------------------------|
|Invoice |
|-------------------------|
|invoice_number str |
|product_id int |
|product_id_mod int |
|invoice_issue_date Date |
|... |
|-------------------------|
例如:
invoice_number product_id product_id_mod invoice_issue_date
IN_01 1 1 2020-01-01 the product name at this moment: Orange
IN_02 1 2 2020-02-13 the product name at this moment: Orange Spn
IN_03 1 3 2020-03-25 the product name at this moment: Orange from Spain
|---------------|
|product_price |
|---------------|
|product_id |
|date_from |
|price |
|---------------|
表DDL:
product_id date_from price
1 2019-05-13 5
1 2020-01-01 6
1 2020-03-05 8
实体:
CREATE TABLE PRODUCTS (
ID INT NOT NULL,
ID_MOD INT NOT NULL,
ACTUAL_MOD INT NOT NULL,
NAME VARCHAR(100),
PRIMARY KEY PK_PRODUCTS (ID, ID_MOD)
);
CREATE TABLE PRODUCT_PRICES(
ID_PRODUCT INT NOT NULL,
FROM_DATE DATE NOT NULL,
PRICE NUMERIC(22, 6),
PRIMARY KEY PK_PRODUCT_PRICES (ID_PRODUCT, FROM_DATE),
CONSTRAINT FK_PRODUCT_PRICES FOREIGN KEY (ID_PRODUCT) REFERENCES PRODUCTS (ID)
);
CREATE TABLE INVOICE(
INVOICE_NUMBER VARCHAR(15) NOT NULL,
INVOICE_ISSUE_DATE DATE NOT NULL,
PRIMARY KEY PK_INVOICE (INVOICE_NUMBER)
);
CREATE TABLE INVOICE_LINES(
ID_LINE INT NOT NULL AUTO_INCREMENT,
INVOICE_NUMBER VARCHAR(15) NOT NULL,
ID_PRODUCT INT NOT NULL,
ID_PRODUCT_MOD INT NOT NULL,
PRIMARY KEY PK_INVOICE_LINES (ID_LINE),
FOREIGN KEY FK_INVOICE_LINES_01 (INVOICE_NUMBER) REFERENCES INVOICE (INVOICE_NUMBER),
FOREIGN KEY FK_INVOICE_LINES_02 (ID_PRODUCT, ID_PRODUCT_MOD) REFERENCES PRODUCTS (ID, ID_MOD)
);
例外::来自实体类[class Products]的带注释元素[method getProductPrices]的@JoinColumns不完整。当源实体类使用复合主键时,必须使用@JoinColumns为每个联接列指定@JoinColumn。名称和referencedColumnName元素都必须在每个此类@JoinColumn中指定。
如何将ProductPrices映射到Products?