我正在嘗試將一些代碼插入數據庫。但是,我在使用彼此子類的模型時遇到了問題。我有一個包含所有這些子類的列表。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
提交
取消