hibernate - JPA继承设计问题
问题描述
我正在尝试使用以下数据模型的继承来创建 JPA 实体。我有一个带有 ID、开始和结束日期的价格表。有不同的定价类型,例如按小时向用户收费的标准价格和根据销售量向他收费的批量价格。在等级价格的情况下,相同的价格条目有多个条目。例如,如果交易量为 0 到 100 则为 1 美元,101 到 1000 的价格为 1.25 美元,超过 1000 则为 1.50 美元。下面是我的数据模型
Price
ID
Start_Date
End_Date
Standard Price
ID
price_id(FK)
price
Tier Price
ID
Price_id (FK)
start_tier
end_tier
我正在尝试使用 Spring Boot 和 JPA 保留价格详细信息并对实体进行建模。我打算使用继承策略,将价格基类和标准和等级价格作为子类。我正面临 Tier Price 子类的问题,因为多行一起形成一个单一的价格条目。以下是我在模型中可视化的内容,但这可能不适用于 Enity。有没有办法创建一个实体来满足以下要求,或者唯一的方法是通过引入新表来更改数据模型来分组层信息。
public class TierPriceHolder extends price{
private List<Tiers> price;
}
解决方案
我不打算评论在这样的平面表中嵌套结构化信息是否是一个合理的想法,但如果你想将它们全部保存在一个表中,你只需要一个额外的父实体对分层价格进行分组:
public class VolumePrice extends Price {
@OneToMany
@JoinColumn(name = "volume_price_id")
private Collection<TierPrice> tiers;
}
使用这样的层次结构,您将简单地获得一个父行,其中多个子行指向它,所有这些都在同一个表中:
+----+----------+-----------------+------------+-------------+------------+----------+-------------+
| id | price_id | volume_price_id | start_date | end_date | start_tier | end_tier | DTYPE |
+----+----------+-----------------+------------+-------------+------------+----------+-------------+
| 1 | | | 1 Jan 2020 | 31 Dec 2020 | | | Price |
+----+----------+-----------------+------------+-------------+------------+----------+-------------+
| 2 | 1 | | | | | | VolumePrice |
+----+----------+-----------------+------------+-------------+------------+----------+-------------+
| 3 | | 2 | | | 0 | 100 | Tier |
+----+----------+-----------------+------------+-------------+------------+----------+-------------+
| | | 2 | | | 101 | 200 | Tier |
+----+----------+-----------------+------------+-------------+------------+----------+-------------+
(我仍然对 的含义感到困惑price_id
,但我希望你能大致了解)
推荐阅读
- mysql - 当我收到错误错误代码:1248 时,我正在这样做。每个派生表都必须有自己的别名,任何人都可以帮助我为什么它是错误的?
- entity-framework-6 - 使用动态 linq 将多对一展平
- angular - Angular Custom 顶部栏下拉菜单在单击菜单项时显示和隐藏
- wordpress - 如何将属性列添加到 WooCommerce 管理订单列表
- elasticsearch - 非法参数异常:映射器 [data_center] 无法从类型 [keyword] 更改为 [text]
- angular - FullCalender 弹出框在错误位置呈现
- flutter - 如何更改列内单个元素的 MainAxisAlignment
- c# - MQTTnet 和限制连接的客户端数量
- laravel - 如何在 Laravel 日志中存储每个用户的请求 IP 和代理
- loops - Vue.js 迭代图像 src