首页 > 解决方案 > 使用数据库时可以使用类型检查代码吗?

问题描述

我正在尝试将一些代码插入数据库。但是,我在使用彼此子类的模型时遇到了问题。我有一个包含所有这些子类的列表。

List<Metric> metrics = experiment.getMetrics();

for(Metric m : metrics) {
    int id = m.getId();
    // type checking code

}

Metric 有 Rating 和 Quantity 的子案例。这些中的每一个又都有自己唯一定义的表。我对使用类型检查的想法很矛盾。但我没有看到任何直接的解决方案。一种似乎没有更好的替代方法是在 Metric 表中创建一个名为 metric_type 的新列。但这会导致与类型检查非常相似的事情。有什么建议么?

标签: javaoopdesign-patterns

解决方案


由于不完全兼容的系统之间的映射,您遇到了对象关系阻抗不匹配。由于关系模型中的表之间无法继承,因此您必须在使用继承的对象模型中牺牲一些东西。除非您切换到对象数据库,否则无论您做什么都会有边缘情况。

如果在扩展Metric加载实体的类中定义自定义 CRUD 操作可能会很棘手。Metric.get(id)如果每个表都有自己的 PK 序列并且两者都有Rating并且Quantity可以具有相同的数字 PK 值,那么究竟会加载什么。

你可以看看 JPA 如何解决这个问题。它使用自定义注释,例如@MappedSuperclass@Entity。我想这是类型检查的一种形式。


推荐阅读