java - 使用数据库时可以使用类型检查代码吗?
问题描述
我正在尝试将一些代码插入数据库。但是,我在使用彼此子类的模型时遇到了问题。我有一个包含所有这些子类的列表。
List<Metric> metrics = experiment.getMetrics();
for(Metric m : metrics) {
int id = m.getId();
// type checking code
}
Metric 有 Rating 和 Quantity 的子案例。这些中的每一个又都有自己唯一定义的表。我对使用类型检查的想法很矛盾。但我没有看到任何直接的解决方案。一种似乎没有更好的替代方法是在 Metric 表中创建一个名为 metric_type 的新列。但这会导致与类型检查非常相似的事情。有什么建议么?
解决方案
由于不完全兼容的系统之间的映射,您遇到了对象关系阻抗不匹配。由于关系模型中的表之间无法继承,因此您必须在使用继承的对象模型中牺牲一些东西。除非您切换到对象数据库,否则无论您做什么都会有边缘情况。
如果在扩展Metric
加载实体的类中定义自定义 CRUD 操作可能会很棘手。Metric.get(id)
如果每个表都有自己的 PK 序列并且两者都有Rating
并且Quantity
可以具有相同的数字 PK 值,那么究竟会加载什么。
你可以看看 JPA 如何解决这个问题。它使用自定义注释,例如@MappedSuperclass
和@Entity
。我想这是类型检查的一种形式。
推荐阅读
- json - 如何使用 Notepad++ 或 Python 对不完整的 .json 文件(缺少括号)中的键进行排序?
- java - 如何在 Android Studio 2020 中找到 R 文件?
- html - 为什么我的图像没有显示在同一行中?
- awk - awk 从 file1 中按顺序查找缺失的数字并附加到 file2 中的列
- c# - Directory.CreateDirectory“找不到文件...”错误
- c# - 如何通过文件内部名称查看进程
- java - Java中的Binance Margin Borrow API
- reactjs - React:带有参数和正文的 axios 发布请求
- ruby-on-rails - Rails MVC 框架的哪一部分将被重定向身份验证定位?
- c# - 使用 SMTP 客户端在 Outlook 中创建任务