【发布时间】:2018-01-25 13:39:59
【问题描述】:
我正在围绕加密货币进行一些研究,在谈到它的技术方面时,我发现了一个可能更常见的问题,并且有人已经找到了解决方案。
我找到了一个按产品包含历史信息的数据库,它针对不同的组合有不同的表,但表的结构是相同的。
我设计了这个 DBO,没有什么火箭科学:
public class ProductHistoryDbo {
private long id;
private long startTime;
private long endTime;
private float low;
private float high;
private float open;
private float close;
private float volume;
}
并且数据库每个 (exchange, currency_in, currency_to) 有一个表
product_history_gdax_bch_btc
product_history_gdax_bch_eur
...
有 12 个结构相同的表格,另外还有一个包含您可以在其中找到的所有其他表格。
所以我的想法是只有一个实体和存储库,但如果可能的话,动态更改在 spring-boot 中从哪个表中检索数据,以便在将来添加新表而不需要添加样板时进行调整代码。
最终的 E2E 将拥有一个带有组合框的管理页面,其中包含将向该服务器发出请求的所有元组,并且数据库中的更改不会意味着后端代码的更改。
【问题讨论】:
-
我认为没有一种干净的方法可以做到这一点。为什么不简单地将
exchange, currency_in, currency_to保留为ProductHistoryDbo状态的一部分?如果你关心性能,你可以考虑创建一个由这三个属性组成的索引(显然,这是否能提高性能取决于读/写比率) -
@crizzis 因为我无法控制这些表
-
您不能将两个表映射到同一个实体。你必须创建两个。
-
在这种情况下,我看到的唯一解决方法是按照@SimonMartinelli 的建议为每个类创建一个实体,并使用
ProductHistoryDbo作为@MappedSuperclass。
标签: database jpa spring-boot spring-data