我正在尝试将一些代码插入数据库。但是,我在处理互为子类的模型时遇到了问题。我有一个包含所有这些子类的列表。
List<Metric> metrics = experiment.getMetrics();
for(Metric m : metrics) {
int id = m.getId();
// type checking code
}
Metric 有 Rating 和 Quantity 的子案例。这些中的每一个又都有自己唯一定义的表。我对使用类型检查的想法很矛盾。但我看不到任何立竿见影的解决办法。一种替代方法似乎并没有更好,它是在 Metric 表中创建一个名为 metric_type 的新列。但这会导致与类型检查非常相似的事情。有什么建议吗?
最佳答案
你遇到了Object-relational impedance mismatch由于不完全兼容的系统之间的映射。由于关系模型中表之间的继承是不可能的,因此您将不得不在使用继承的对象模型中牺牲一些东西。除非你切换到 object database,否则无论你做什么都会有边缘情况。 .
如果您在扩展 Metric
的类中定义自定义 CRUD 操作,加载实体可能会很棘手。如果每个表都有自己的 PK 序列并且 Rating
和 Quantity
可以具有相同的值,那么 Metric.get(id)
究竟会加载什么数值PK值。
大家可以看看JPA是怎么解决这个问题的。它使用自定义注释,例如@MappedSuperclass
和 @Entity
。我猜这是一种类型检查。
关于java - 使用数据库时可以使用类型检查代码吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54265641/