我想按如下方式为产品实施定价:
- 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。这样我就可以知道客户在购买产品时为产品支付的费用。
此数据还可用于尚未定义的会计和其他数据挖掘活动。