亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用數據庫時可以使用類型檢查代碼嗎?

使用數據庫時可以使用類型檢查代碼嗎?

Cats萌萌 2022-05-12 15:03:50
我正在嘗試將一些代碼插入數據庫。但是,我在使用彼此子類的模型時遇到了問題。我有一個包含所有這些子類的列表。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。我想這是類型檢查的一種形式。


查看完整回答
反對 回復 2022-05-12
?
胡子哥哥

TA貢獻1825條經驗 獲得超6個贊

我不建議你輸入檢查


解決這個問題的 OOP 方法是insert在類中創建一個方法Metric。Rating然后Quality用在相應表中插入對象的適當代碼覆蓋該方法。


for(Metric m : metrics) {

    int id = m.getId();

    m.insert();


}

在您的循環內部只需調用insert,由于后期綁定,將調用適當的方法并執行正確的代碼。


查看完整回答
反對 回復 2022-05-12
  • 2 回答
  • 0 關注
  • 83 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號