java - 使用数据库时可以使用类型检查代码吗?

标签 java oop design-patterns

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

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 序列并且 RatingQuantity 可以具有相同的值,那么 Metric.get(id) 究竟会加载什么数值PK值。

大家可以看看JPA是怎么解决这个问题的。它使用自定义注释,例如@MappedSuperclass@Entity。我猜这是一种类型检查。

关于java - 使用数据库时可以使用类型检查代码吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54265641/

相关文章:

java - MappedByteBuffer - 将页面映射到物理内存

javascript - OOP javascript 和简单类实例化

algorithm - 动态成就系统算法/设计

Java 访问者模式 2

java - c :url tag includes jsession id query string

java - android/java中的校验和计算

java - sql查询未执行

Php:单例VS全静态类?什么时候用什么?

java - 为什么子类越骑只能比父类(super class)有更弱的访问权限

c# - 使用许多 if 和重复逻辑重构代码以从不同控件类中提取值的最佳方法是什么