【发布时间】:2013-09-09 17:29:19
【问题描述】:
我想按如下方式为产品实施定价:
- Product 对象包含一个描述其当前价格的 Pricing 对象。
- Product 表以一对多关系链接到 Pricing 表
到目前为止听起来很简单,但我遇到问题的部分是
- 产品只有一个有效价格,即最近的一个。
- 不应获取最近一次之前的任何定价记录。
- 当用户编辑产品定价时,当前记录不应更新,而应插入具有当前时间戳的新记录。
- 保留以前的定价记录是出于历史原因(例如,在购买产品时看到客户希望获得退款)。
本质上,在 Product 对象中,关系应该看起来像是一对一的关系。但是,我不知道如何使用 Hibernate 实现这样的事情
Last Record of one to many relation 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。这样我就可以知道客户在购买产品时为产品支付的费用。
此数据还可用于尚未定义的会计和其他数据挖掘活动。
【问题讨论】:
-
您可以创建一个仅显示最新价格的可更新视图,并在 Hibernate 中使用该视图(不确定 Hibernate 是否可行 - 我不使用它)
-
改变数据模型以更好地反映真实关系和用例不是一种选择?
-
@OndrejBozek:数据模型有什么问题?这是对版本化价格进行建模的常见模式(尽管我通常使用 valid_from/valid_to 方法而不是单个时间戳)
-
我并不是说这是错的。对我来说,似乎(仅从这个有限的描述)重要且普遍接受的价格是最后的价格。所以我可能会从
Product(例如一对一)模拟到最后一个Price的显式连接。然后以某种方式将它与它的历史联系起来。但正如我所说,我对问题领域的了解不如你。 -
是什么阻止您限制访问历史价格?他们不会只是备份。
标签: java hibernate postgresql