我想按如下方式为产品实施定价:
- Product 对象包含一个描述其当前价格的 Pricing 对象。
- Product 表以一对多关系链接到 Pricing 表
+------------+ +------------+
| 产品 | | 价格 |
+------------+ 1-n +------------+
| 产品编号 | ------------ | 产品编号 |
| ... | | price_id |
+------------+ | 价格价值 |
| price_creation_time |
| ... |
+----------+
到目前为止听起来很简单,但我遇到的问题是
- 该产品只有一个有效价格,即最近的一个。
- 不应获取最近一次之前的任何定价记录。
- 当用户编辑产品的定价时,不应更新当前记录,而应插入具有当前时间戳的新记录。
- 保留以前的定价记录是出于历史原因(例如,在购买产品时看到客户想要退款)。
从本质上讲,在 Product 对象中,关系应该看起来好像是一对一的关系。但是,我不知道如何使用 Hibernate 来实现这样的事情
一对多关系 Hibernate Criteria 的最后记录表明,称为 Criteria 的东西可能会有所帮助,但我对 Hibernate 的经验很少,并且仍在掌握类注释。
是否有可能实现一对多的关系,就像与 Hibernate 这样的一对一关系?我该怎么做呢?
更新:关于这个想法的更多信息如下:
收据将包含所购买的每件商品的记录集合。
+--------------+ +------------------+
| 收据 | | 收据行 | +----------+
+--------------+ +-----------------+ +----- | 产品 |
| 收据_id | ------------ | 收据_id | | +----------+
| 收据时间 | | 产品编号 | -----+ +--------+
| ... | | price_id | ------------ | 价格 |
+--------------+ | 产品数量 | +-------+
| ... |
+------------------+
产品有一个当前价格(显然只有一个当前价格),该价格由价格表中具有最新时间戳的价格记录确定。
SELECT *
FROM prices
WHERE product_id = (Product ID goes here)
ORDER BY price_creation_time;
LIMIT 1;
当您更新定价时,我想插入一条新的,而不是更新当前链接到产品的定价记录。
INSERT INTO price (
product_id,
price_value,
price_creation_time
) VALUES (
(Product ID goes here),
(New price goes here),
NOW()
);
当客户购买某物时,会在每件购买的商品的收据记录中添加一行。每行包含产品的 ID,cut 还包括生成收据时适用的定价记录的 ID。这样我就可以知道客户在购买产品时为产品支付的费用。
此数据还可用于尚未定义的会计和其他数据挖掘活动。