我正在尝试将一些代码插入数据库。但是,我在使用彼此子类的模型时遇到了问题。我有一个包含所有这些子类的列表。List<Metric> metrics = experiment.getMetrics();for(Metric m : metrics) { int id = m.getId(); // type checking code}Metric 有 Rating 和 Quantity 的子案例。这些中的每一个又都有自己唯一定义的表。我对使用类型检查的想法很矛盾。但我没有看到任何直接的解决方案。一种似乎没有更好的替代方法是在 Metric 表中创建一个名为 metric_type 的新列。但这会导致与类型检查非常相似的事情。有什么建议么?
2 回答

繁星coding
TA贡献1797条经验 获得超4个赞
由于不完全兼容的系统之间的映射,您遇到了对象关系阻抗不匹配。由于关系模型中的表之间无法继承,因此您必须在使用继承的对象模型中牺牲一些东西。除非您切换到对象数据库,否则无论您做什么都会有边缘情况。
如果在扩展Metric
加载实体的类中定义自定义 CRUD 操作可能会很棘手。Metric.get(id)
如果每个表都有自己的 PK 序列并且两者都有Rating
并且Quantity
可以具有相同的数字 PK 值,那么究竟会加载什么。
你可以看看 JPA 如何解决这个问题。它使用自定义注释,例如@MappedSuperclass
和@Entity
。我想这是类型检查的一种形式。

胡子哥哥
TA贡献1825条经验 获得超6个赞
我不建议你输入检查
解决这个问题的 OOP 方法是insert在类中创建一个方法Metric。Rating然后Quality用在相应表中插入对象的适当代码覆盖该方法。
for(Metric m : metrics) {
int id = m.getId();
m.insert();
}
在您的循环内部只需调用insert,由于后期绑定,将调用适当的方法并执行正确的代码。
添加回答
举报
0/150
提交
取消